X86_64

x86_64体系结构函数调用时函数参数传递方法

∥☆過路亽.° 提交于 2020-03-17 10:54:17
某厂面试归来,发现自己落伍了!>>> x86_64体系架构中函数调用时整数和指针参数按照从左到右的顺序依次保存在寄存器rdi,rsi,rdx,rcx,r8和r9中,浮点型参数保存在寄存器xmm0,xmm1......中。若有更多的参数则按照从右到左的顺序依次压入堆栈。 当使用GDB工具调试C代码时,若使用break function设置断点时,若使用break function_name则断点设置在进入function以及保存完寄存器后的汇编语句上,而使用break *function_name则断点设置在刚刚进入函数的位置上(并没有保存栈帧到堆栈)。 来源: oschina 链接: https://my.oschina.net/u/206258/blog/172930

X86_64平台下32位汇编语言调用C库函数程序的汇编与链接

百般思念 提交于 2020-02-28 23:42:27
声明:转载请注明原链接 http://my.oschina.net/u/1167407/blog/484426 ‍‍‍今天在看《Professional Assembly Language》一书的第四章的Using C Library Functions in Assembly一节时,由于我使用的是64位的Linux系统,所以遇到了一些问题,其中有些挺有用的信息。所以,记录下来以免遗忘。‍ Using C Library Functions in Assembly这一小节介绍了如何在汇编程序中调用C的库函数。书中给出的示例代码如下:‍‍ .section .data output: .asciz “The processor Vendor ID is ‘%s’\n” .section .bss .lcomm buffer, 12 .section .text .globl _start _start: movl $0, %eax cpuid movl $buffer, %edi movl %ebx, (%edi) movl %edx, 4(%edi) movl %ecx, 8(%edi) pushl $buffer pushl $output call printf addl $8, %esp pushl $0 call exit 接下来使用gnu as汇编这段程序