代码之家  ›  专栏  ›  技术社区  ›  Gregory Balko

gdb,如何进入c运行时?crt_c.c在哪里?

  •  -1
  • Gregory Balko  · 技术社区  · 7 年前

    当我进入调试程序时,它说它找不到 crt/crt_c.c 文件我下载了gcc 6.3.0的源代码,但crt_c.c在哪里?

    还有,我如何在那里找到printf和rand的源代码?我想在调试器中逐步完成它们。

    编辑:我之所以这么做是因为我试图减小可执行文件的大小。直接进入独立式会给我留下很多缺失的功能,所以我打算一个接一个地研究和替换它们。我正在尝试这样做,使我的程序更小更快,并且能够更容易地研究汇编输出。

    还有,忘了提一下,我在windows上,msys2。但答案仍然有用。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Basile Starynkevitch    7 年前

    我如何在那里找到printf和rand的源代码?

    他们( printf , rand C standard library 哪个(在Linux上)是 GCC 编译器。但是 crt0 由GCC提供(但是,通常不使用调试信息编译),并且在编译GCC期间在构建树中生成了一些C文件。

    glibc (或者可能 musl-libc libc 通常使用系统调用(在中列出 syscalls(2)

    我想在调试器中逐步完成它们。

    锂离子电池 没有 调试信息 DWARF 总体安排

    一些Linux发行版提供了可调试的 ,也许是一些 libc6-dbg

    (你的问题缺乏动机,闻起来像是 XY problem

    我打算逐一研究和替换它们。

    system call 界面并没有很好的文档记录),可能需要很多年(或者可能超过一生)。你有那么多时间吗?

    同时阅读 Operating Systems: Three Easy Pieces 并调查 OsDev 维基。

    增长 可执行文件的大小(但稍后可能为 strip ped)。顺便说一句,标准C函数位于许多进程使用的一些公共共享库(或Windows上的DLL)中。

    我在windows上,msys2。

    free software