gpt4 book ai didi

c - 用内联汇编 C 替换函数

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

我有一个函数,我想将其内部代码转换为程序集(出于各种原因):

int foo(int x, int y, int z);

我使用以下方法生成了汇编代码:

clang -S -mllvm --x86-asm-syntax=intel foo.c

程序集输出:foo.s 以如下内容开头:

_foo:                               ## @foo
.cfi_startproc
## BB#0:
push RBP
Ltmp2:
.cfi_def_cfa_offset 16
...

我假设这是该函数对应的汇编代码。我的问题是,我应该将汇编输出的哪一部分复制到 C 代码中(我正在尝试使用内联汇编),以便该函数可以工作?代码应如下所示:

int foo(int x, int y, int z) {
__asm__("..."); // <-- What goes inside?
}

谢谢

最佳答案

您必须查看该函数的反汇编并编写 __asm__ .例如下面的代码

int foo(int x, int y, int z) {<br/>
x = y+z;
return x;
}

将产生以下反汇编:

int foo(int x, int y, int z) {
push ebp
mov ebp,esp
sub esp,0C0h
push ebx
push esi
push edi
lea edi,[ebp-0C0h]
mov ecx,30h
mov eax,0CCCCCCCCh
rep stos dword ptr es:[edi]

x = y+z;
mov eax,dword ptr [y]
add eax,dword ptr [z]
mov dword ptr [x],eax

return x;
mov eax,dword ptr [x]
}

所以你必须在下面添加语句 x= y+z ,

 mov         eax,dword ptr [y] 
add eax,dword ptr [z]
mov dword ptr [x],eax

关于c - 用内联汇编 C 替换函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24034852/

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