相关疑难解决方法(0)

如何使用gcc以英特尔语法生成汇编代码?

gcc -S选项将以AT&T语法生成汇编代码,有没有办法用Intel语法生成文件?或者有没有办法在两者之间进行转换?

x86 assembly gcc gnu intel

144
推荐指数
3
解决办法
7万
查看次数

我可以在GCC中使用x86汇编的Intel语法吗?

我想写一个小的低级程序.对于它的某些部分,我将需要使用汇编语言,但其余代码将使用C/C++编写.

那么,如果我使用GCC将C/C++与汇编代码混合在一起,我是否需要使用AT&T语法,还是可以使用Intel语法?或者你如何以其他方式混合使用C/C++和asm(intel语法)?

我意识到也许我没有选择,必须使用AT&T语法,但我想确定..

如果结果没有选择,我可以在哪里找到有关AT&T语法的完整/官方文档?

谢谢!

c x86 assembly gcc inline-assembly

59
推荐指数
2
解决办法
3万
查看次数

在C/C++中使用内联汇编

我正在尝试使用内联汇编...我读过这个页面http://www.codeproject.com/KB/cpp/edujini_inline_asm.aspx但我无法理解传递给我的函数的参数.

我正在写一个C写的例子..这是我的函数头:

write2(char *str, int len){
}
Run Code Online (Sandbox Code Playgroud)

这是我的汇编代码:

global write2
write2:
    push ebp
    mov ebp, esp
    mov eax, 4      ;sys_write
    mov ebx, 1      ;stdout
    mov ecx, [ebp+8]    ;string pointer
    mov edx, [ebp+12]   ;string size
    int 0x80        ;syscall
    leave
    ret
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能将代码传递给C函数...我正在做这样的事情:

write2(char *str, int len){
    asm ( "movl 4, %%eax;"
          "movl 1, %%ebx;"
          "mov %1, %%ecx;"
          //"mov %2, %%edx;"
          "int 0x80;"
           :
           : "a" (str), "b" (len)
    );
}
Run Code Online (Sandbox Code Playgroud)

那是因为我没有输出变量,所以我该如何处理呢?此外,使用此代码:

global main
main:
    mov ebx, 5866       ;PID
    mov ecx, …
Run Code Online (Sandbox Code Playgroud)

c linux x86 assembly inline-assembly

9
推荐指数
1
解决办法
2万
查看次数

在 .intel_syntax GNU C 内联汇编中引用内存操作数

使用内联汇编编译和链接源文件时,我发现链接错误。

以下是测试文件:

via:$ cat test.cxx
extern int libtest();
int main(int argc, char* argv[])
{
    return libtest();
}

$ cat lib.cxx
#include <stdint.h>
int libtest()
{
    uint32_t rnds_00_15;    
    __asm__ __volatile__
    (
        ".intel_syntax noprefix         ;\n\t"
        "mov DWORD PTR [rnds_00_15], 1  ;\n\t"
        "cmp DWORD PTR [rnds_00_15], 1  ;\n\t"
        "je  done                       ;\n\t"
        "done:                          ;\n\t"
        ".att_syntax noprefix           ;\n\t"
        :
        : [rnds_00_15] "m" (rnds_00_15)
        : "memory", "cc"
    );

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译和链接程序会导致:

via:$ g++ -fPIC test.cxx lib.cxx -c
via:$ g++ -fPIC lib.o test.o -o test.exe
lib.o: …
Run Code Online (Sandbox Code Playgroud)

c++ gcc linker-errors inline-assembly intel-syntax

3
推荐指数
1
解决办法
1209
查看次数

为什么objdump的汇编编码不同?

我正在阅读有关位置独立代码的文章,并且遇到了此函数的汇编清单。

0000043c <ml_func>:
 43c:   55                      push   ebp
 43d:   89 e5                   mov    ebp,esp
 43f:   e8 16 00 00 00          call   45a <__i686.get_pc_thunk.cx>
 444:   81 c1 b0 1b 00 00       add    ecx,0x1bb0
 44a:   8b 81 f0 ff ff ff       mov    eax,DWORD PTR [ecx-0x10]
 450:   8b 00                   mov    eax,DWORD PTR [eax]
 452:   03 45 08                add    eax,DWORD PTR [ebp+0x8]
 455:   03 45 0c                add    eax,DWORD PTR [ebp+0xc]
 458:   5d                      pop    ebp
 459:   c3                      ret

0000045a <__i686.get_pc_thunk.cx>:
 45a:   8b 0c 24                mov …
Run Code Online (Sandbox Code Playgroud)

x86 assembly gcc objdump intel-syntax

2
推荐指数
1
解决办法
55
查看次数

标签 统计

assembly ×4

gcc ×4

x86 ×4

inline-assembly ×3

c ×2

intel-syntax ×2

c++ ×1

gnu ×1

intel ×1

linker-errors ×1

linux ×1

objdump ×1