GDB加载/卸载so时断下来的方法及步骤

admin 2022-09-28 PM 3386℃ 43条

给bluerust推销「DTrace on Windows」,他顺嘴说费了好一会儿才在gdb python里实现sxe等价功能。当时我也顺嘴问了一句,你是想sxe啥?他说原始需求是「模块一加载,在指定偏移下一个断点」。当时我想他怕是有啥高级需求要满足,才动用gdb python。单就这个需求,我一般catch commands写一段,比如

catch load some
commands $bpnum
    tb *some+off
    commands $bpnum
        silent
        set *(unsigned int*)($rcx+0x200)=$rax
        c
    end
    c
end

gdb里有

catch load [regexp]
catch unload [regexp]

正好对应windbg

sxe ld:<module name>
sxe ud:<module name>

还有一个相关的

set stop-on-solib-events 1

gdb 7.4.1还不支持"catch load",至少7.6.1已经支持。

然后bluerust痛哭流涕、捶胸顿足

我日,还有catch load啊!!!我傻逼了!!!我折腾了半天,Gdb支持event new_objfile,但是svr4在map之前会emit new objfile event,我转而在_dl_setup_hash上下断点,刚好能拿到所有的信息……白费我看了半天代码!!!好,这个好啊!!!日,幸好说了一嘴。

人吧,太能干了也不好,你看bluerust,就是太能干了,以至于碰上这种需求了,二话不说操刀开干,硬撸一个实现。换我,先放狗,能偷懒就偷懒。另一方面,再次印证了交流讨论的意义所在,开局只是顺嘴一说的事,后续是意料之外的事。

后记

"catch load"只有加载成功时才会命中,若想拦载所有加载so的企图,比如库不存在,但想知道在哪儿试图加载,用"b *do_dlopen"。

  • scz
标签: GDB

非特殊说明,本博所有文章均为博主原创。

评论啦~



已有 43 条评论


  1. 1
    1

    1

    回复 2023-05-19 20:36
    1. 1
      1

      1

      回复 2023-05-19 23:59
      1. 1
        1

        555

        回复 2023-05-22 10:26
        1. 1
          1

          1

          回复 2023-05-22 13:41
        2. 1
          1

          1

          回复 2023-05-22 13:41
        3. 1
          1

          1

          回复 2023-05-22 13:41
        4. 1
          1

          1

          回复 2023-05-22 13:41
        5. 1
          1

          1

          回复 2023-05-22 13:42
        6. 1
          1

          1

          回复 2023-05-22 13:42
        7. 1
          1

          1

          回复 2023-05-22 13:42
        8. 1
          1

          1

          回复 2023-05-22 13:42
        9. 1
          1

          1

          回复 2023-05-22 13:42
        10. 1
          1

          1

          回复 2023-05-22 13:42
      2. 1
        1

        1

        回复 2023-05-22 13:38
      3. 1
        1

        1

        回复 2023-05-22 13:38
      4. 1
        1

        1

        回复 2023-05-22 13:38
    2. 1
      1

      1

      回复 2023-05-22 09:57
    3. 1
      1

      1

      回复 2023-05-22 13:37
    4. 1
      1

      1

      回复 2023-05-22 13:37
    5. 1
      1

      1

      回复 2023-05-22 13:39
    6. 1
      1

      1

      回复 2023-05-22 13:39
    7. 1
      1

      1

      回复 2023-05-22 13:40
    8. 1
      1

      1

      回复 2023-05-22 13:40
  2. 1
    1

    555

    回复 2023-05-19 22:01
    1. 1
      1

      1

      回复 2023-05-20 00:00
    2. 1
      1

      1

      回复 2023-05-20 00:00
    3. 1
      1

      1

      回复 2023-05-20 00:00
    4. 1
      1

      555

      回复 2023-05-20 00:44
  3. 1
    1

    1

    回复 2023-05-19 23:17
    1. 1
      1

      1

      回复 2023-05-20 00:17
  4. 1
    1

    1

    回复 2023-05-19 23:17
  5. 1
    1

    1

    回复 2023-05-19 23:17
  6. 1
    1

    1

    回复 2023-05-22 09:44
  7. 1
    1

    555

    回复 2023-05-22 10:16
    1. 1
      1

      1

      回复 2023-05-22 12:31
    2. 1
      1

      1

      回复 2023-05-22 12:31
    3. 1
      1

      1

      回复 2023-05-22 12:31
    4. 1
      1

      555

      回复 2023-05-22 14:49
    5. 1
      1

      555

      回复 2023-05-22 14:54
  8. 1
    1

    1

    回复 2023-05-22 12:29
  9. 1
    1

    1

    回复 2023-05-22 12:29
  10. 1
    1

    555

    回复 2023-05-22 14:37
  11. 1
    1

    555

    回复 2023-07-07 15:17