Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .intel_syntax noprefix //Use Intel syntax, which is more readable, instead of that ridiculous GAS syntax that is the default
- .code32 //32bit code/ABI
- .global asm_caller
- .global asm_data //Tell assembler to export these symbols referencing their addresses.
- .global asm_func
- .section .text //Code must be in a .text section, why "text" is beyond me.
- asm_func:
- mov eax, [esp+4] //ESP holds return address, +4 holds first param, +8 holds second param, etc
- shl eax, 2 //Assembly trick to multiply by 4
- ret //EAX holds return value.
- asm_caller:
- mov eax, [esp+4]
- mov ebx, [esp+8]
- push ebx
- push eax //Pushing is in reverse order in the ABI
- call _Z7cppfuncii
- add esp, 8 //ABI makes it our job to clean up the mess on the callstack.
- ret //EAX still holds previous return value
- .section .data //Must be in a .data section if you want it to be writable without throwing a segfault/access exception.
- asm_data: .long 0xdeaddead //.long is for long int (4 bytes), as opposed to short int (2 bytes) since "int" was never properly standardized.
Advertisement
Add Comment
Please, Sign In to add comment