gpt4 book ai didi

c - 什么 c 代码会编译成类似 `call *%eax` 的东西?

转载 作者:太空狗 更新时间:2023-10-29 15:35:49 25 4
gpt4 key购买 nike

我正在使用 c 和汇编语言,我在几个地方看到了 call *%eax。我想编写一个小的 c 程序来编译成这样的东西,但我被卡住了。

我正在考虑编写一些汇编代码,例如这个问题:x86 assembly instruction: call *Reg在我的案例中仅使用 AT&T 语法来获得一个包含调用的小示例。但是,这并不能解决我急需解决的问题,即哪种 C 代码可以编译成那样?

我知道这是对 eax 指向的地址的调用。

最佳答案

文档:http://gcc.gnu.org/onlinedocs/gcc/Local-Reg-Vars.html#Local-Reg-Vars

试试这个

#include <stdio.h>

typedef void (*FuncPtr)(void);
void _Func(void){
printf("Hello");
}

int main(int argc, char *argv[]){
register FuncPtr func asm ("eax") = _Func;
func();

return 0;
}

及其相关程序集:

    .file   "functorTest.c"
.section .rdata,"dr"
LC0:
.ascii "Hello\0"
.text
.globl __Func
.def __Func; .scl 2; .type 32; .endef
__Func:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
movl $LC0, (%esp)
call _printf
leave
ret
.def ___main; .scl 2; .type 32; .endef
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
call ___main
movl $__Func, %eax
call *%eax ; see?
movl $0, %eax
movl %ebp, %esp
popl %ebp
ret
.def _printf; .scl 2; .type 32; .endef

关于c - 什么 c 代码会编译成类似 `call *%eax` 的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21324087/

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