在這裏,在64位尋址做工精細SYS_WRITE呼叫與ARGS寄存器是一段代碼,引起了我的問題: 爲什麼打算32位尋址
mystr:
.string "ABCDEFGH"
.set mystrlen, . - mystr
.text
.globl main
.type main, @function
main:
sub $0x10, %rsp
movq $0x44434241, 0x8(%rsp)
lea 0x8(%rsp), %rcx
movq $4, %rax
movq $1, %rbx
//movq $mystr, %rcx
//movq $mystrlen, %rdx
movq $4, %rdx
int $0x80
movq $1, %rax
movq $0, %rbx
int $0x80
代表片段不起作用,系統調用參數的64位尋址寄存器中的cuz應分別爲rdi, rsi, rdx
,分別對應於第1,第2和第3系統調用參數,而不是rbx, rcx, rdx
(對於x86中的調用)。 但我爲什麼被註釋掉的線與rbx, rcx, rdx
正常工作?
你見過[this](http://stackoverflow.com/questions/10105871/why-cant-i-sys-write-from-a-register) – t0mm13b
使用源代碼並找出sys_write調用的位置實現。 – t0mm13b