gpt4 book ai didi

linux - Linux/x86 中通用寄存器的使用

转载 作者:太空宇宙 更新时间:2023-11-04 10:52:47 24 4
gpt4 key购买 nike

这是一个一般性问题(例如在 Linux 和 x86 上):

如果不调用系统调用,常规 C 程序将不会(隐式)使用任何通用寄存器,这是真的吗?

最佳答案

这个程序:

#include <stdio.h>

int main(int argc, char **argv) {
printf("%d", argc);
}

生成这个程序集:

    .section    __TEXT,__text,regular,pure_instructions
.macosx_version_min 10, 10
.globl _main
.align 4, 0x90
_main: ## @main
.cfi_startproc
## BB#0:
pushq %rbp
Ltmp0:
.cfi_def_cfa_offset 16
Ltmp1:
.cfi_offset %rbp, -16
movq %rsp, %rbp
Ltmp2:
.cfi_def_cfa_register %rbp
movl %edi, %ecx
leaq L_.str(%rip), %rdi
xorl %eax, %eax
movl %ecx, %esi
callq _printf
xorl %eax, %eax
popq %rbp
retq
.cfi_endproc

.section __TEXT,__cstring,cstring_literals
L_.str: ## @.str
.asciz "%d"


.subsections_via_symbols

这显然使用了通用寄存器 eaxecxesi。此外,请注意,此代码中没有系统调用,只是对 libc 的 _printf 的函数调用。

关于linux - Linux/x86 中通用寄存器的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30133333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com