Assembly 在汇编代码中复制读取函数
我正在尝试用汇编语言复制以下c代码:Assembly 在汇编代码中复制读取函数,assembly,x86-64,Assembly,X86 64,我正在尝试用汇编语言复制以下c代码: long hex_read(char data_buf[]){ return read(0,data_buf,16); } .globl hex_read hex_read: subq $8,%rsp movq %rdi,%rsi movq $0,%rdi movq $16,%rdx call read addq $8,%rsp ret 这是我用汇编语言实现的: long h
long hex_read(char data_buf[]){
return read(0,data_buf,16);
}
.globl hex_read
hex_read:
subq $8,%rsp
movq %rdi,%rsi
movq $0,%rdi
movq $16,%rdx
call read
addq $8,%rsp
ret
这是我用汇编语言实现的:
long hex_read(char data_buf[]){
return read(0,data_buf,16);
}
.globl hex_read
hex_read:
subq $8,%rsp
movq %rdi,%rsi
movq $0,%rdi
movq $16,%rdx
call read
addq $8,%rsp
ret
然后,我通过创建一个主汇编函数来测试这个汇编代码
.section .text
hex_read_buf: .space 16
.globl main
main:
subq $8,%rsp
movq $hex_read_buf,%rdi
call hex_read
addq $8,%rsp
ret
但是,当我在gdb中测试它时,无论我输入什么,十六进制读取(存储在%rax中)的返回值都会得到0,这很奇怪。有人能告诉我我做错了什么吗?非常感谢。将
hex\u read\u buf
放入部分。文本
是个坏主意,因为这通常是只读的。我希望你能得到-1
返回errno==EFAULT
。我刚刚测试过,我确实得到了-1
。不管怎样,把它放到.data
中应该可以解决问题,在这里就可以了。@Jester非常感谢你!(我找不到一个真正好的标准副本,因为.text
是只读的,就像一个简单的问题,在这个问题上有一个答案,这个答案从说这是问题开始。或者当你传递一个不可写的指针时,系统调用返回-EFAULT
。如果有人想在这里写一个,我可以重新调用。)n、 或者,如果有人发现现有的问答,请告诉我。)将hex\u read\u buf
放入部分。text
是个坏主意,因为这通常是只读的。我希望你能得到-1
返回errno==EFAULT
。我刚刚测试过,我确实得到了-1
。不管怎样,把它放到.data
中应该可以解决问题,在这里就可以了。@Jester非常感谢你!(我找不到一个真正好的标准副本,因为.text
是只读的,就像一个简单的问题,在这个问题上有一个答案,这个答案从说这是问题开始。或者当你传递一个不可写的指针时,系统调用返回-EFAULT
。如果有人想在这里写一个,我可以重新调用。)n、 或者,如果有人发现现有问答,请告诉我。)