,我應該用氣什麼指示?我找到了'.org'指令,但GAS似乎沒有'.bits'指令。
彙編器默認爲64 - 位對我來說,你可以使用--32
或--64
,以選擇在命令行上。查看as的手冊以瞭解如何在需要時更改代碼內的體系結構(例如,.code16
可用於爲引導加載程序生成實模式代碼)。
您很可能不想使用.org
指令來指定代碼的位置,但可能希望使用鏈接腳本或指定文本和數據段在命令行上加載的位置。 (org 0x0000000000200000
導致2+ MB二進制文件)。
我應該傳遞給gcc或者生成一個純二進制文件?即-f bin選項與NASM有什麼關係。
$ cat test.S
.section .text
.globl _start
_start:
xor %rax, %rax
mov test, %rax
ret
test: .quad 0x1234567812345678
$ as --64 -o test.o test.S
$ ld -Ttext 200000 --oformat binary -o test.bin test.o
$ objdump -D -b binary -m i386:x86-64 test.bin
test.bin: file format binary
Disassembly of section .data:
0000000000000000 <.data>: 0: 48 31 c0 xor %rax,%rax 3: 48 8b 04 25 0c 00 20 mov 0x20000c,%rax a: 00 b: c3 retq
c: 78 56 js 0x64 e: 34 12 xor $0x12,%al 10: 78 56 js 0x68 12: 34 12 xor $0x12,%al
出於好奇:什麼是代碼的目標平臺?我見過的最常見的方法是看到引導扇區的16位裸組件,但事實並非如此,因爲您使用的是64位。 –
[有沒有辦法讓gcc輸出原始二進制?](http://stackoverflow.com/questions/1647359/is-there-a-way-to-get-gcc-to-output-raw -binary) –