Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Leave everything intact before _start

25 views
Skip to first unread message

Frederick Virchanza Gotham

unread,
Mar 15, 2023, 11:21:00 AM3/15/23
to

I've been programming since the 90's in Visual Basic, C, C++, but just this month I've really gotten into x86_64 assembler.

Using the GNU compiler suite, I've built my program and given it a new entry point called 'pre_start' which does a few things before jumping into '_start'.

When 'pre_start' is finished processing and it's just about to jump into '_start', I want to be certain that pre_start hasn't left any remnants at all -- I need every register to be the way it was, and for the stack to be unaltered.

Using the NASM assembler, I've written two macroes. I subsitute the former in at the beginning of "pre_start", and I substitute the latter in just before the instruction 'jmp _start'.

Here's what I currently have. What else would you put in there? I want to make a generic way of saving and restoring everything that might change so that the function has no lasting observable effect.

%macro backup_all_registers 0
push rax
push rbx
push rcx
push rdx
push rsi
push rdi
push r8
push r9
push r10
push r11
push r12
push r13
push r14
push r15
%endmacro

%macro restore_all_registers 0
pop r15
pop r14
pop r13
pop r12
pop r11
pop r10
pop r9
pop r8
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
pop rax
%endmacro

Frederick Virchanza Gotham

unread,
Mar 15, 2023, 12:51:06 PM3/15/23
to
On Wednesday, March 15, 2023 at 3:21:00 PM UTC, Frederick Virchanza Gotham wrote:
>
> Here's what I currently have. What else would you put in there?


By the way I don't save the frame pointer (rbp) because I follow "save_registers" with "enter 0,0".

Terje Mathisen

unread,
Mar 15, 2023, 5:51:29 PM3/15/23
to
What's wrong with PUSHA?

Alternatively, why do you need so many registers for a little
pre-amble/setup module?

Terje

--
- <Terje.Mathisen at tmsw.no>
"almost all programming can be viewed as an exercise in caching"

Frederick Virchanza Gotham

unread,
Mar 16, 2023, 4:37:29 AM3/16/23
to
On Wednesday, March 15, 2023 at 9:51:29 PM UTC, Terje Mathisen wrote:
>
> What's wrong with PUSHA?


There's no equivalent of PUSHA or PUSHAD on x86_64.

Terje Mathisen

unread,
Mar 16, 2023, 4:52:31 AM3/16/23
to
So that was a pair of opcodes AMD grabbed then! Thanks for enlightening me!

I still want to know about why you need so many regs?
0 new messages