我有一个函数,其内部代码我想转换成汇编(出于各种原因):
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?
}
由于
答案 0 :(得分:1)
您必须查看该函数的反汇编并编写__asm__
。例如下面的代码
int foo(int x, int y, int z) {
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