C二进制中的整数:使用readelf,objdump或类似文件查看它

问题描述 投票:0回答:1

我有以下C源文件hello.c,是通过g++ -o hello hello.c在Linux上编译的:

#include <stdio.h>
const char* p = "Hello world";
const long nn = 0xDEADBEEF;
int main() 
{ 
        printf("%s %ld", p, nn);
        return -1; 
}

(是的,我知道我正在为C使用g ++,但这不是这个问题的重点。)

我想使用readelfobjdump来查看常量整数0xDEADBEEF在二进制文件中的存储位置,但是我不知道使用命令开关来简化此操作。使用这些工具,我可以清楚地看到我的字符串,但不能看到整数。我尝试了各种命令选项,这些命令选项没有意义,因为它毫无意义,并且正在通过grep搜索BEEF来传递输出。

我需要什么命令行?

c linux objdump readelf
1个回答
2
投票

在计算中,字节序是指数字的二进制表示形式中字节(或有时是位)的顺序。

little endian表示中最高有效字节最后存储,而最低有效字节先存储]。因此,在小尾数法中,0xDEADBEEF将存储为0xef 0xbe 0xad 0xde

而,

big endian

中,最高有效字节先存储],而最低有效字节后存储]。在大字节序中,0xDEADBEEF将存储为0xde 0xad 0xbe 0xef
程序指令存储在.text部分中。全局静态数据存储在可执行文件的.data部分中。全局静态常量数据存储在可执行文件的.rodata(只读数据)部分中。本地常量数据也存储在.text部分中。

对于

//#include <stdio.h>
const char* p = "Hello world";

int main() 
{ 
        const long nn = 0xDEADBEEF;
      //printf("%s %ld", p, nn);
        return -1; 
}

编译时使用

gcc hello.c -o hello -nostdlib -e main

((使用-nostdlib减小可执行文件的大小)

您好,其中包含以下内容:

Contents of section .interp:
 0238 2f6c6962 36342f6c 642d6c69 6e75782d  /lib64/ld-linux-
 0248 7838362d 36342e73 6f2e3200           x86-64.so.2.    
Contents of section .note.gnu.build-id:
 0254 04000000 14000000 03000000 474e5500  ............GNU.
 0264 45c5b659 336be965 5721226a 788a4906  E..Y3k.eW!"jx.I.
 0274 d7528479                             .R.y            
Contents of section .gnu.hash:
 0278 01000000 01000000 01000000 00000000  ................
 0288 00000000 00000000 00000000           ............    
Contents of section .dynsym:
 0298 00000000 00000000 00000000 00000000  ................
 02a8 00000000 00000000                    ........        
Contents of section .dynstr:
 02b0 00                                   .               
Contents of section .rela.dyn:
 02b8 00102000 00000000 08000000 00000000  .. .............
 02c8 e4020000 00000000                    ........        
Contents of section .text:
 02d0 554889e5 b8efbead de488945 f8b8ffff  UH.......H.E....
 02e0 ffff5dc3                             ..].            
Contents of section .rodata:
 02e4 48656c6c 6f20776f 726c6400           Hello world.    
Contents of section .eh_frame_hdr:
 02f0 011b033b 14000000 01000000 e0ffffff  ...;............
 0300 30000000                             0...            
Contents of section .eh_frame:
 0308 14000000 00000000 017a5200 01781001  .........zR..x..
 0318 1b0c0708 90010000 1c000000 1c000000  ................
 0328 a8ffffff 14000000 00410e10 8602430d  .........A....C.
 0338 064f0c07 08000000                    .O......        
Contents of section .dynamic:
 200ef0 f5feff6f 00000000 78020000 00000000  ...o....x.......
 200f00 05000000 00000000 b0020000 00000000  ................
 200f10 06000000 00000000 98020000 00000000  ................
 200f20 0a000000 00000000 01000000 00000000  ................
 200f30 0b000000 00000000 18000000 00000000  ................
 200f40 15000000 00000000 00000000 00000000  ................
 200f50 07000000 00000000 b8020000 00000000  ................
 200f60 08000000 00000000 18000000 00000000  ................
 200f70 09000000 00000000 18000000 00000000  ................
 200f80 1e000000 00000000 08000000 00000000  ................
 200f90 fbffff6f 00000000 01000008 00000000  ...o............
 200fa0 f9ffff6f 00000000 01000000 00000000  ...o............
 200fb0 00000000 00000000 00000000 00000000  ................
 200fc0 00000000 00000000 00000000 00000000  ................
 200fd0 00000000 00000000 00000000 00000000  ................
 200fe0 00000000 00000000 00000000 00000000  ................
 200ff0 00000000 00000000 00000000 00000000  ................
Contents of section .data:
 201000 e4020000 00000000                    ........        
Contents of section .comment:
 0000 4743433a 20285562 756e7475 20372e34  GCC: (Ubuntu 7.4
 0010 2e302d31 7562756e 7475317e 31382e30  .0-1ubuntu1~18.0
 0020 342e3129 20372e34 2e3000             4.1) 7.4.0.  

[您可以在.text节的偏移量02d5处看到小端的死牛肉。

阅读更多,[1]字节序:https://en.wikipedia.org/wiki/Endianness

© www.soinside.com 2019 - 2024. All rights reserved.