[英]Replacing function with inline assembly C
我有一个函数,其内部代码我想转换为汇编(出于各种原因):
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) {
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.