opengl plhook替换了共享库中的gl函数,但出现了nullptr崩溃

8zzbczxx  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(90)

在plhook的帮助下:https://github.com/kubo/plthook我用我的假函数替换了共享库中的所有gl函数。但是在so文本段中调用gl函数会崩溃。
此libtest.so基于x64,libGLESv 2不在其依赖列表中,但在cflags中添加了-lGLESv 2,因此主可执行文件二进制编译通过。
第一个
这是我现在发现:
1.崩溃回溯


# 0  0x0000000000000000 in ?? ()

# 1  0x00007f22cb60c319 in xxxx::Init

1.行#1调用了glGetIntegerv

0x00007f22cb60c30f <+143>:   mov    $0x8869,%edi
=> 0x00007f22cb60c314 <+148>:   callq  0x7f22cb2d1bf0 <glGetIntegerv@plt> 
   0x00007f22cb60c319 <+153>:   mov    0x548db0(%rip),%rsi

1..GOT glGetIntegerv的项目

Dump of assembler code for function glGetIntegerv@plt:
=> 0x00007f22cb2d1bf0 <+0>:     jmpq   *0x88b6f2(%rip)        # 0x7f22cbb5d2e8
   0x00007f22cb2d1bf6 <+6>:     pushq  $0xe5a
   0x00007f22cb2d1bfb <+11>:    jmpq   0x7f22cb2c3640
  1. glGetIntegerv被替换了glGetIntegerv被一个假的MyglGetIntegerv替换了,地址:
&MyglGetIntegerv == 0x7f22cda39800
  1. 0x 7 f22 cbb 5d2 e8中的内容在核心转储中为7 f22 cda 39800
0x00007f22cbb5d2e6:  00 00   add    %al,(%rax)
=> 0x00007f22cbb5d2e8:  00 98 a3 cd 22 7f       add    %bl,0x7f22cda3(%rax)
   0x00007f22cbb5d2ee:  00 00   add    %al,(%rax)

1.信息寄存器:

rax            0x0      0
rbx            0x14ff9aa62e00   23088043798016
rcx            0x7f22d0f174e7   139787511100647
rdx            0x7f22cbb6ab74   139787423361908
rsi            0x8869   34921
rdi            0x12     18
rbp            0x7fffff692db0   0x7fffff692db0
rsp            0x7fffff692ca8   0x7fffff692ca8
r8             0x0      0
r9             0x7fffff6925c6   140737478469062
r10            0x7fffff6925c8   140737478469064
r11            0x0      0
r12            0x7f22cbb4b188   139787423232392
r13            0x4a8a3c49       1250573385
r14            0x14ff9aa62e00   23088043798016
r15            0x14ff9aa62e00   23088043798016
rip            0x0      0x0

为什么rip是0x 0?
我分析了coredump,所有的东西看起来都很好,我不知道

ercv8c1e

ercv8c1e1#

哎呀,替换确实起作用了,问题是回溯没有完成,导致我走错了方向

相关问题