C++ 这是什么风格的组件(英特尔、att…等等?),我如何生产它?
我正试图生成这样的汇编代码(以便它与nasm一起工作) 首先,这是什么汇编风格;其次,如何使用类似于C++ 这是什么风格的组件(英特尔、att…等等?),我如何生产它?,c++,c,gcc,compiler-construction,C++,C,Gcc,Compiler Construction,我正试图生成这样的汇编代码(以便它与nasm一起工作) 首先,这是什么汇编风格;其次,如何使用类似于gcc-S code.C-o code.S-masm=intel的命令从C文件生成它?这是英特尔风格 您在问题中编写的命令行有什么问题?-masm=intel正是产生这种风格的原因(intel语法,而不是默认的AT&T语法)。但这只适用于实际指令。像[SECTION]这样的东西是特定于NASM的,GCC总是生成特定于GAS的。那么,当我使用(-masm=intel)运行上面的命令,然后尝试运行命令
gcc-S code.C-o code.S-masm=intel的命令从C文件生成它?这是英特尔风格
您在问题中编写的命令行有什么问题?-masm=intel
正是产生这种风格的原因(intel语法,而不是默认的AT&T语法)。但这只适用于实际指令。像[SECTION]
这样的东西是特定于NASM的,GCC总是生成特定于GAS的。那么,当我使用(-masm=intel)运行上面的命令,然后尝试运行命令NASM-f elf code.S
时,我会得到一大堆错误?因为NASM不是GAS。指令是错误的。@HansPassant你能再解释一下你的意思吗?@Nosrettap-风格的一部分是它看起来像手写的汇编。这可能是问题的一部分吗?只是如果我使用这个命令,然后我尝试使用命令nasm-f elf code.s
,我会得到一大堆错误
;hello.asm
[SECTION .text]
global _start
_start:
jmp short ender
starter:
xor eax, eax ;clean up the registers
xor ebx, ebx
xor edx, edx
xor ecx, ecx
mov al, 4 ;syscall write
mov bl, 1 ;stdout is 1
pop ecx ;get the address of the string from the stack
mov dl, 5 ;length of the string
int 0x80
xor eax, eax
mov al, 1 ;exit the shellcode
xor ebx,ebx
int 0x80
ender:
call starter ;put the address of the string on the stack
db 'hello'