我在尝试使用 SPWN 或 Pwntools 运行二进制文件时遇到问题。这是上下文:
SPWN 日志:
[*] Binary: baskin
[*] Libc: libc-2.27.so
[*] Loader: ld-linux-x86-64.so.2
[*] file baskin
ELF 64-bit LSB executable
x86-64
dynamically linked
not stripped
[*] checksec baskin
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x400000)
Libc version: 2.27
[+] Trying to unstrip libc
[*] Libc unstripped
-- ldd of the original binary
linux-vdso.so.1 (0x00007fffec961000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fba54613000)
/lib64/ld-linux-x86-64.so.2 (0x00007fba54843000)
-- ldd of the patched binary
linux-vdso.so.1 (0x00007ffdd1f1c000)
libc.so.6 => ./debug_dir/libc.so.6 (0x00007f648de00000)
./debug_dir/ld-linux.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007f648e343000)
Pwntools代码:
from pwn import *
p = process('baskin', env={'LD_PRELOAD':'./libc-2.27.so'})
libc = ELF('./libc-2.27.so')
p.interactive()
遇到错误:
Inconsistency detected by ld.so: dl-call-libc-early-init.c: 37: _dl_call_libc_early_init: Assertion `sym != NULL' failed!
SPWN 和 Pwntools 似乎都无法运行指定 libc 版本 (
baskin
) 的二进制文件 libc-2.27.so
。尽管尝试在 SPWN 中取消删除 libc,但错误仍然存在。
我检查了环境变量和路径,但没有发现任何明显的问题。任何有关如何解决这种不一致的见解或建议将不胜感激。
没关系,加载器 ld-linux-x86-64.so.2 是问题的原因,原因我不知道。通过删除加载程序并让 spwn 下载加载程序解决了该问题。