键入后,我在汇编中编写了一个程序:
> 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
为什么以及如何修复它?
答案 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。
纠正之后,没关系。