Assembly 在汇编代码中复制读取函数

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

我正在尝试用汇编语言复制以下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 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、 或者,如果有人发现现有问答,请告诉我。)