媒介
在Linux中,可履行文件的格局是ELF格局,而有一些下令可以輔助咱們相識它們更多的“神秘”,以此來輔助咱們辦理成績。
示例法式
咱們的示例法式以下:
- #include<stdio.h>
- int main(int argc,char *argv[])
- {
- printf("hello shouwangxiansheng\n");
- return 0 ;
- }
編譯:
- $ gcc -o hello hello.c
失去hello可履行文件。
查望文件類型
file下令可以用來查望文件類型:
- $ file hello
- hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 2.6.32, BuildID[sha1]=8f1de0f59bdfe9aaff85ade6898173aa436b296a, not stripped
從效果中,咱們可以曉得,它是ELF可履行文件,且是64位法式,有靜態鏈接,最初的not stripped也注解了它保留了符號表信息或者者調試信息。
若是不是可履行文件,它的信息是奈何的呢?舉個例子:
- $ file hello.c
- hello.c: C source, UTF-8 Unicode text
望到了吧。
查望ELF頭
readelf用于查望ELF文件,而:
- $ readelf -h hello
- ELF Header:
- Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
- Class: ELF64
- Data: 2’s complement, little endian
- Version: &n地下539公式bsp; 1 (current)
- OS/ABI: UNIX – System V
- ABI Version: 0
- Type:  偏財運生肖; EXEC (Executable file)
- Machine: Advanced Micro Devices X86-64
- (略)
可以望到它是EXEC,即可履行文件,且小端法式,運轉于X86-64。在穿插編譯的時辰,這個文件頭的信息也特別很是有效。例如你在x86的機械上穿插編譯出powerpc的可履行文件,在powerpc上卻不被辨認,不克不及運轉,不如用readelf望望它的Machine字段,是否是沒有編譯好。
查找ELF文件中的字符串
例如,你在文件中寫入了版本號或者者非凡字符串,可以經由過程strings下令搜刮到:
- $ strings hello|grep shouwang
- hello shouwangxiansheng
查望ELF文件各段巨細
- $ size hello
- text data bss dec hex filename
- 1210 552 8 1770 6ea hello
這里可以望到代碼段,數據段各自占若干,需要時辰還可以依據必要優化代碼,淘汰磁盤空間占用。
查望鏈接的靜態庫
運轉時浮現找不到靜態庫?不如望望它鏈接了哪如何算出你的偏財運些庫吧:
- $ ldd hello
- &算偏財運nbsp; linux-vdso.so.1 => (0x00007ffd16386000)
- libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f507e083000)
- /lib64/ld-linux-x86-64.so.2 (0x00007f507e44d000)
可以望到它鏈接的靜態庫是/lib/x86_64-linux-gnu/libc.so.6,而若是該文件不存在,則運轉時將會失足。這里也能夠參考《靜態庫的建造以及使用》。
查望符號表
【免責聲明】本站內容轉載自互聯網,其相關談吐僅代表作者小我私家概念盡非權勢巨子,不代表本站態度。如您發明內容存在版權成績,請提交相關鏈接至郵箱:,咱們將實時予以處置。
大樂透中2個號碼多少錢 |