分割错误" movl(%ebx),%eax"

时间:2015-07-17 03:11:32

标签: linux assembly x86

键入后,我在汇编中编写了一个程序:

> strings = c("abc", "bcd", "def", "ghi", "xyzzd", "a")
> str_to_find = "de"
> substring(strings, 1, nchar(str_to_find)) == str_to_find
[1] FALSE FALSE  TRUE FALSE FALSE FALSE

它显示了一个分段错误,当我使用gdb进行调试时,gdb说:

as -32 maximum.s -o maximum.o
ld -m elf_i386 maximum.o -o maximum
./maximum

我的代码是:

Program received signal SIGSEGV, Segmentation fault.
max() at maximum.s:27
27       movl(%ebx), %eax

为什么以及如何修复它?

2 个答案:

答案 0 :(得分:1)

要调试x86 asm代码,请使用具有asm模式的调试器。 x86 tag wiki有一些指向有用内容的链接,以及有关如何将gdb用于asm的说明。逐步执行代码,并在寄存器更改时查看寄存器中的值。带有public void randomMethod() { JButton button = new JButton() implements updatable{ public void update() {} }; } 的gdb在每条指令后突出显示已更改的寄存器。

您可能将数据视为地址。我跟着你的代码了一下,但没有花时间确定有问题。

不是错误,而是

layout reg

应该是

movl 8(%ebp), %ebx 
movl 8(%ebp), %edx  

答案 1 :(得分:1)

程序开始时出错。

.section。日期应为.section.data。

纠正之后,没关系。