繁体   English   中英

用内联汇编C替换功能

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM