【问题标题】:Assembler segmentation fault on dereference register address解引用寄存器地址上的汇编程序分段错误
【发布时间】:2012-04-13 08:13:31
【问题描述】:

我对 x86 程序集 (AT&T) 有疑问。

因为我需要在汇编程序中实现数组查找,所以我在寄存器 %ebx 中有数组的第一项(比如 arr[0]),为了指向 arr[1],例如我写道:

mov -4(%ebx), %eax

问题是,当我尝试获取 ebx 的地址时出现分段错误,这很奇怪,因为我可以毫无问题地获取 ebx 的值(arr[0] 的值)。 有什么建议吗?

编辑: 好的,我想我理解了这个错误。 当我声明数组时,我必须将第一个元素的地址放在变量 arr 上:

mov -4(%ecx), %eax

但是通过这条指令,我输入了值而不是地址。 那我怎么放地址呢?

【问题讨论】:

  • 可以显示周边代码吗?我认为您对寄存器的工作方式有误解。

标签: assembly segmentation-fault dereference


【解决方案1】:

arr[1] 实际上不太可能-4[%ebx],它更可能在+4

但根据您的问题,我不确定您是否理解。仅当 %ebx 是数组中第一个元素的 address 时,这才有效。您的文字似乎表明您已将 arr[0] 加载到 ebx 中,在这种情况下,无法从那里获取其他元素。

您可能需要发布更多代码,以便我们了解您实际尝试执行的操作。对于编程问题,代码通常胜过描述性文本:-)

【讨论】:

    猜你喜欢
    • 2013-01-10
    • 2012-01-19
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    相关资源
    最近更新 更多