gpt4 book ai didi

c - x86汇编中全局变量的地址

转载 作者:太空宇宙 更新时间:2023-11-04 08:20:40 28 4
gpt4 key购买 nike

我有一个声明全局变量 char file[MAX] 的 C 代码。该变量在各种函数中直接用于将文件名复制到它。我可以将这个c文件编译成汇编代码,但我不知道如何找到这个变量的地址

在x86堆栈中,我如何找到全局变量?能否举例说明汇编代码中如何引用全局变量?


编辑:我在汇编代码中没有看到 .Data 段。

最佳答案

存储文件的地址以注册EAX:

AT&T 语法:movl $_file, %eax

英特尔语法:mov eax, OFFSET _file


如何检查:

首先编写一段简单的代码(test.c)。

#define MAX 256

char file[MAX];

int main(void) {
volatile char *address = file;
return 0;
}

然后编译成汇编代码:gcc -S -O0 -o test.s test.c

    .file   "test.c"
.comm _file, 256, 5
.def ___main; .scl 2; .type 32; .endef
.text
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
LFB0:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
andl $-16, %esp
subl $16, %esp
call ___main
movl $_file, 12(%esp)
movl $0, %eax
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
LFE0:
.ident "GCC: (GNU) 4.8.1"

或者如果你想要 intel 语法:gcc -S -O0 -masm=intel -o test_intel.s test.c

    .file   "test.c"
.intel_syntax noprefix
.comm _file, 256, 5
.def ___main; .scl 2; .type 32; .endef
.text
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
LFB0:
.cfi_startproc
push ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
mov ebp, esp
.cfi_def_cfa_register 5
and esp, -16
sub esp, 16
call ___main
mov DWORD PTR [esp+12], OFFSET FLAT:_file
mov eax, 0
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
LFE0:
.ident "GCC: (GNU) 4.8.1"

通过更多的实验和检查,我得到了结果。

关于c - x86汇编中全局变量的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33577823/

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