美文网首页
打印自身的源代码的程序

打印自身的源代码的程序

作者: wjundong | 来源:发表于2021-08-19 22:13 被阅读0次
  • demo.c

    int printf(const char * format, ...);
    
    extern char* _binary_demo_c_start;
    
    int main()
    {
        
        printf("%s\n", &_binary_demo_c_start);
    
        return 0;
    }
    
  • makefile

    all:
        gcc -c demo.c -o demo.o
        objcopy -I binary -O elf64-x86-64 demo.c code.o 
        gcc demo.o code.o
    
    
  • 运行

    $ make && ./a.out
    
  • 查看链接情况

    $ objdump -ht demo.o
    ...
    0000000000000000 g     F .text  000000000000001a main
    0000000000000000         *UND*  0000000000000000 _binary_demo_c_start
    0000000000000000         *UND*  0000000000000000 _GLOBAL_OFFSET_TABLE_
    ...
    
    $ objdump -ht code.o
    节:
    Idx Name          Size      VMA               LMA               File off  Algn
    0 .data         00000098  0000000000000000  0000000000000000  00000040  2**0
                    CONTENTS, ALLOC, LOAD, DATA
    SYMBOL TABLE:
    0000000000000000 g       .data  0000000000000000 _binary_demo_c_start
    0000000000000098 g       .data  0000000000000000 _binary_demo_c_end
    0000000000000098 g       *ABS*  0000000000000000 _binary_demo_c_size
    
    $ objdump -ht a.out
    ...
    00000000000040c8 g       .data  0000000000000000              _binary_demo_c_end
    0000000000004030 g       .data  0000000000000000              _binary_demo_c_start
    ...
    

    可以看到demo.o 中 _binary_demo_c_start 还没有被链接, code.o 放在 .data 区, 并且有一个全局的 SYMBOL _binary_demo_c_start, a.out 文件以及链接完成, 并给出 SYMBOL 地址

相关文章

网友评论

      本文标题:打印自身的源代码的程序

      本文链接:https://www.haomeiwen.com/subject/lefzbltx.html