我有一个目文件的编制使用 作为 (从汇编码)。

如果我把它用 ld, 当我试着 stepi (或 nexti)库抱怨访存在的地址0x0。如果我把它用 海湾合作委员会, 所有被罚款。

我猜测引起的问题是 ld, ,其产生的较少部分相比较时,连接的结果 海湾合作委员会.

有没有办法配置库可以更详细的所以我也许可以弄清楚什么是错的可执行的?

(gdb) b main
Breakpoint 1 at 0x100000f8e
(gdb) r
Breakpoint 1, 0x0000000100000f8e in main ()
(gdb) x/10i $pc
0x100000f8e <main>: fbld   0x6c(%rip)        # 0x100001000 <data1>
0x100000f94 <main+6>: fimul  0x7a(%rip)        # 0x100001014 <data2>
0x100000f9a <main+12>: fbstp  0x60(%rip)        # 0x100001000 <data1>
0x100000fa0 <main+18>: mov0x0    $0x2000001,%rax
0x100000fa7 <main+25>: mov    $,%rdi
0x100000fae <main+32>: syscall 
(gdb) si
Cannot access memory at address 0x0
0x0000000100000f94 in main ()

PS:可执行的本身的运行,预期在这两个版本。

后来的编辑:命令我们用来编译:

as -arch x86_64 src.s -o src.o
ld -e _main -arch x86_64 src.o -o src
gcc -o src src.o
有帮助吗?

解决方案

库具有"显示debug"的命令,给予各种内部调试设置。E.g。"设定"调试"目标1"将有关追踪用于库的互动与目标的过程。你也许想尝试的每一个标志他们(不多)。

其他提示

海湾合作委员会实际上并没有做好联系,它只是呼吁ld您的代表。选项,它是提供必须不同于那些你使用。

每个这个主线:

如何获得海湾合作委员会接头的命令?

你应该能够看到ld援引的命令行通过运行海湾合作委员会。这应该告诉你如何修改ld命令行这样的事情对你的工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top