一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Mac的反編譯工具一:otool (objdump工具的OSX對應(yīng)工具)

 champion_xu 2015-10-29

objdump的選項-S、-l十分方便。如果二進制文件中帶有調(diào)試信息,可以將源代碼、文件名和行號與匯編代碼對應(yīng)顯示。

在OSX上,對應(yīng)的工具是otool。與“objdump -Sl”能力接近的命令是otool -tV。

看一看insert sort算法的反編譯。插入排序的一種實現(xiàn):

  1
              2
              3
              4
              5
              6
              7
              8
              9
             10
             11
             12
             13
             14
             15
             16
             17
             18
             19
             20
             21
             22
             23
             24
             25
             26
             27
             28
            
#include <stdio.h>

void insert_sort(int* L, int size) {
int tmp, i, j;
for (i = 1; i < size; ++i) {
tmp = L[i];
for (j = i-1; j >= 0 && L[j] > tmp; --j) {
L[j+1] = L[j];
}
L[j+1] = tmp;
}
}

void print_array(int* L, int size) {
printf("array: ");
for (int i = 0; i < size; ++i) {
printf("%d ", L[i]);
}
printf("\n");
}

int main (int argc, char** argv) {
int L[] = {18, 7, 5, 8, 99};
int size = sizeof(L) / sizeof(int);
insert_sort(L, size);
print_array(L, size);
return 0;
}
來自CODE的代碼片
insert_sort.c

這個實現(xiàn)中沒有全局變量,數(shù)據(jù)段(Data Section)應(yīng)該沒有內(nèi)容。我們用"otool -dV insertsort"這個命令,只顯示Data Section, 驗證一下:

  1. oliverluan@localhost:~/Documents/Opt/insertsort$ otool -dV insertsort  
  2. insertsort:  

如果把L數(shù)據(jù)和size變量改寫成全局變量:

  1. oliverluan@localhost:~/Documents/Opt/insertsort$ gcc -g insertsort_global.c -o insertsort_global  
  2. oliverluan@localhost:~/Documents/Opt/insertsort$ otool -dV insertsort_global  
  3. insertsort_global:  
  4. (__DATA,__data) section  
  5. 0000000100001020    12 00 00 00 07 00 00 00 05 00 00 00 08 00 00 00  
  6. 0000000100001030    63 00 00 00 05 00 00 00  

看一看Text Section: otool -tV insertsort:

  1. oliverluan@localhost:~/Documents/Opt/insertsort$ otool -tV insertsort  
  2. insertsort:  
  3. (__TEXT,__text) section  
  4. _insert_sort:  
  5. 0000000100000dd0    pushq   %rbp  
  6. 0000000100000dd1    movq    %rsp, %rbp  
  7. 0000000100000dd4    movq    %rdi, 0xfffffffffffffff8(%rbp)  
  8. 0000000100000dd8    movl    %esi, 0xfffffffffffffff4(%rbp)  
  9. 0000000100000ddb    movl    $0x1, 0xffffffffffffffec(%rbp)  
  10. 0000000100000de2    movl    0xffffffffffffffec(%rbp), %eax  
  11. 0000000100000de5    cmpl    0xfffffffffffffff4(%rbp), %eax  
  12. 0000000100000de8    jge 0x100000e94  
  13. 0000000100000dee    movslq  0xffffffffffffffec(%rbp), %rax  
  14. 0000000100000df2    movq    0xfffffffffffffff8(%rbp), %rcx  
  15. 0000000100000df6    movl    (%rcx,%rax,4), %edx  
  16. 0000000100000df9    movl    %edx, 0xfffffffffffffff0(%rbp)  
  17. 0000000100000dfc    movl    0xffffffffffffffec(%rbp), %edx  
  18. 0000000100000dff    subl    $0x1, %edx  
  19. 0000000100000e05    movl    %edx, 0xffffffffffffffe8(%rbp)  
  20. 0000000100000e08    movb    $0x0, %al  
  21. 0000000100000e0a    cmpl    $0x0, 0xffffffffffffffe8(%rbp)  
  22. 0000000100000e11    movb    %al, 0xffffffffffffffe7(%rbp)  
  23. 0000000100000e14    jl  0x100000e30  
  24. 0000000100000e1a    movslq  0xffffffffffffffe8(%rbp), %rax  
  25. 0000000100000e1e    movq    0xfffffffffffffff8(%rbp), %rcx  
  26. 0000000100000e22    movl    (%rcx,%rax,4), %edx  
  27. 0000000100000e25    cmpl    0xfffffffffffffff0(%rbp), %edx  
  28. 0000000100000e28    setg    %sil  
  29. 0000000100000e2c    movb    %sil, 0xffffffffffffffe7(%rbp)  
  30. 0000000100000e30    movb    0xffffffffffffffe7(%rbp), %al  
  31. 0000000100000e33    testb   $0x1, %al  
  32. 0000000100000e35    jne 0x100000e40  
  33. 0000000100000e3b    jmpq    0x100000e6e  
  34. 0000000100000e40    movslq  0xffffffffffffffe8(%rbp), %rax  
  35. 0000000100000e44    movq    0xfffffffffffffff8(%rbp), %rcx  
  36. 0000000100000e48    movl    (%rcx,%rax,4), %edx  
  37. 0000000100000e4b    movl    0xffffffffffffffe8(%rbp), %esi  
  38. 0000000100000e4e    addl    $0x1, %esi  
  39. 0000000100000e54    movslq  %esi, %rax  
  40. 0000000100000e57    movq    0xfffffffffffffff8(%rbp), %rcx  
  41. 0000000100000e5b    movl    %edx, (%rcx,%rax,4)  
  42. 0000000100000e5e    movl    0xffffffffffffffe8(%rbp), %eax  
  43. 0000000100000e61    addl    $0xffffffff, %eax  
  44. 0000000100000e66    movl    %eax, 0xffffffffffffffe8(%rbp)  
  45. 0000000100000e69    jmpq    0x100000e08  
  46. 0000000100000e6e    movl    0xfffffffffffffff0(%rbp), %eax  
  47. 0000000100000e71    movl    0xffffffffffffffe8(%rbp), %ecx  
  48. 0000000100000e74    addl    $0x1, %ecx  
  49. 0000000100000e7a    movslq  %ecx, %rdx  
  50. 0000000100000e7d    movq    0xfffffffffffffff8(%rbp), %rsi  
  51. 0000000100000e81    movl    %eax, (%rsi,%rdx,4)  
  52. 0000000100000e84    movl    0xffffffffffffffec(%rbp), %eax  
  53. 0000000100000e87    addl    $0x1, %eax  
  54. 0000000100000e8c    movl    %eax, 0xffffffffffffffec(%rbp)  
  55. 0000000100000e8f    jmpq    0x100000de2  
  56. 0000000100000e94    popq    %rbp  
  57. 0000000100000e95    ret  
  58. 0000000100000e96    nopw    %cs:(%rax,%rax)  
  59. _print_array:  
  60. 0000000100000ea0    pushq   %rbp  
  61. 0000000100000ea1    movq    %rsp, %rbp  
  62. 0000000100000ea4    subq    $0x20, %rsp  
  63. 0000000100000ea8    leaq    0xdb(%rip), %rax ## literal pool for: array:  
  64. 0000000100000eaf    movq    %rdi, 0xfffffffffffffff8(%rbp)  
  65. 0000000100000eb3    movl    %esi, 0xfffffffffffffff4(%rbp)  
  66. 0000000100000eb6    movq    %rax, %rdi  
  67. 0000000100000eb9    movb    $0x0, %al  
  68. 0000000100000ebb    callq   0x100000f68 ## symbol stub for: _printf  
  69. 0000000100000ec0    movl    $0x0, 0xfffffffffffffff0(%rbp)  
  70. 0000000100000ec7    movl    %eax, 0xffffffffffffffec(%rbp)  
  71. 0000000100000eca    movl    0xfffffffffffffff0(%rbp), %eax  
  72. 0000000100000ecd    cmpl    0xfffffffffffffff4(%rbp), %eax  
  73. 0000000100000ed0    jge 0x100000f02  
  74. 0000000100000ed6    leaq    0xb5(%rip), %rdi ## literal pool for: %d  
  75. 0000000100000edd    movslq  0xfffffffffffffff0(%rbp), %rax  
  76. 0000000100000ee1    movq    0xfffffffffffffff8(%rbp), %rcx  
  77. 0000000100000ee5    movl    (%rcx,%rax,4), %esi  
  78. 0000000100000ee8    movb    $0x0, %al  
  79. 0000000100000eea    callq   0x100000f68 ## symbol stub for: _printf  
  80. 0000000100000eef    movl    %eax, 0xffffffffffffffe8(%rbp)  
  81. 0000000100000ef2    movl    0xfffffffffffffff0(%rbp), %eax  
  82. 0000000100000ef5    addl    $0x1, %eax  
  83. 0000000100000efa    movl    %eax, 0xfffffffffffffff0(%rbp)  
  84. 0000000100000efd    jmpq    0x100000eca  
  85. 0000000100000f02    leaq    0x8d(%rip), %rdi ## literal pool for:  
  86.   
  87. 0000000100000f09    movb    $0x0, %al  
  88. 0000000100000f0b    callq   0x100000f68 ## symbol stub for: _printf  
  89. 0000000100000f10    movl    %eax, 0xffffffffffffffe4(%rbp)  
  90. 0000000100000f13    addq    $0x20, %rsp  
  91. 0000000100000f17    popq    %rbp  
  92. 0000000100000f18    ret  
  93. 0000000100000f19    nopl    (%rax)  
  94. _main:  
  95. 0000000100000f20    pushq   %rbp  
  96. 0000000100000f21    movq    %rsp, %rbp  
  97. 0000000100000f24    subq    $0x10, %rsp  
  98. 0000000100000f28    leaq    _L(%rip), %rax  
  99. 0000000100000f2f    movl    $0x0, 0xfffffffffffffffc(%rbp)  
  100. 0000000100000f36    movl    %edi, 0xfffffffffffffff8(%rbp)  
  101. 0000000100000f39    movq    %rsi, 0xfffffffffffffff0(%rbp)  
  102. 0000000100000f3d    movl    _size(%rip), %esi  
  103. 0000000100000f43    movq    %rax, %rdi  
  104. 0000000100000f46    callq   _insert_sort  
  105. 0000000100000f4b    leaq    _L(%rip), %rdi  
  106. 0000000100000f52    movl    _size(%rip), %esi  
  107. 0000000100000f58    callq   _print_array  
  108. 0000000100000f5d    movl    $0x0, %eax  
  109. 0000000100000f62    addq    $0x10, %rsp  
  110. 0000000100000f66    popq    %rbp  
  111. 0000000100000f67    ret  

另外,可以用-l選項查看load commands:

  1. oliverluan@localhost:~/Documents/Opt/insertsort$ otool -l insertsort_global  
  2. insertsort_global:  
  3. Load command 0  
  4.       cmd LC_SEGMENT_64  
  5.   cmdsize 72  
  6.   segname __PAGEZERO  
  7.    vmaddr 0x0000000000000000  
  8.    vmsize 0x0000000100000000  
  9.   fileoff 0  
  10.  filesize 0  
  11.   maxprot 0x00000000  
  12.  initprot 0x00000000  
  13.    nsects 0  
  14.     flags 0x0  
  15. Load command 1  
  16.       cmd LC_SEGMENT_64  
  17.   cmdsize 632  
  18.   segname __TEXT  
  19.    vmaddr 0x0000000100000000  
  20.    vmsize 0x0000000000001000  
  21.   fileoff 0  
  22.  filesize 4096  
  23.   maxprot 0x00000007  
  24.  initprot 0x00000005  
  25.    nsects 7  
  26.     flags 0x0  
  27. Section  
  28.   sectname __text  
  29.    segname __TEXT  
  30.       addr 0x0000000100000d60  
  31.       size 0x00000000000001d9  
  32.     offset 3424  
  33.      align 2^4 (16)  
  34.     reloff 0  
  35.     nreloc 0  
  36.      flags 0x80000400  
  37.  reserved1 0  
  38.  reserved2 0  
  39. Section  
  40.   sectname __stubs  
  41.    segname __TEXT  
  42.       addr 0x0000000100000f3a  
  43.       size 0x000000000000000c  
  44.     offset 3898  
  45.      align 2^1 (2)  
  46.     reloff 0  
  47.     nreloc 0  
  48.      flags 0x80000408  
  49.  reserved1 0 (index into indirect symbol table)  
  50.  reserved2 6 (size of stubs)  
  51. Section  
  52.   sectname __stub_helper  
  53.    segname __TEXT  
  54.       addr 0x0000000100000f48  
  55.       size 0x0000000000000024  
  56.     offset 3912  
  57.      align 2^2 (4)  
  58.     reloff 0  
  59.     nreloc 0  
  60.      flags 0x80000400  
  61.  reserved1 0  
  62.  reserved2 0  
  63. Section  
  64.   sectname __cstring  
  65.    segname __TEXT  
  66.       addr 0x0000000100000f6c  
  67.       size 0x000000000000000e  
  68.     offset 3948  
  69.      align 2^0 (1)  
  70.     reloff 0  
  71.     nreloc 0  
  72.      flags 0x00000002  
  73.  reserved1 0  
  74.  reserved2 0  
  75. Section  
  76.   sectname __const  
  77.    segname __TEXT  
  78.       addr 0x0000000100000f80  
  79.       size 0x0000000000000014  
  80.     offset 3968  
  81.      align 2^4 (16)  
  82.     reloff 0  
  83.     nreloc 0  
  84.      flags 0x00000000  
  85.  reserved1 0  
  86.  reserved2 0  
  87. Section  
  88.   sectname __unwind_info  
  89.    segname __TEXT  
  90.       addr 0x0000000100000f94  
  91.       size 0x0000000000000048  
  92.     offset 3988  
  93.      align 2^0 (1)  
  94.     reloff 0  
  95.     nreloc 0  
  96.      flags 0x00000000  
  97.  reserved1 0  
  98.  reserved2 0  
  99. Section  
  100.   sectname __eh_frame  
  101.    segname __TEXT  
  102.       addr 0x0000000100000fe0  
  103.       size 0x0000000000000018  
  104.     offset 4064  
  105.      align 2^3 (8)  
  106.     reloff 0  
  107.     nreloc 0  
  108.      flags 0x00000000  
  109.  reserved1 0  
  110.  reserved2 0  
  111. Load command 2  
  112.       cmd LC_SEGMENT_64  
  113.   cmdsize 312  
  114.   segname __DATA  
  115.    vmaddr 0x0000000100001000  
  116.    vmsize 0x0000000000001000  
  117.   fileoff 4096  
  118.  filesize 4096  
  119.   maxprot 0x00000007  
  120.  initprot 0x00000003  
  121.    nsects 3  
  122.     flags 0x0  
  123. Section  
  124.   sectname __nl_symbol_ptr  
  125.    segname __DATA  
  126.       addr 0x0000000100001000  
  127.       size 0x0000000000000010  
  128.     offset 4096  
  129.      align 2^3 (8)  
  130.     reloff 0  
  131.     nreloc 0  
  132.      flags 0x00000006  
  133.  reserved1 2 (index into indirect symbol table)  
  134.  reserved2 0  
  135. Section  
  136.   sectname __got  
  137.    segname __DATA  
  138.       addr 0x0000000100001010  
  139.       size 0x0000000000000008  
  140.     offset 4112  
  141.      align 2^3 (8)  
  142.     reloff 0  
  143.     nreloc 0  
  144.      flags 0x00000006  
  145.  reserved1 4 (index into indirect symbol table)  
  146.  reserved2 0  
  147. Section  
  148.   sectname __la_symbol_ptr  
  149.    segname __DATA  
  150.       addr 0x0000000100001018  
  151.       size 0x0000000000000010  
  152.     offset 4120  
  153.      align 2^3 (8)  
  154.     reloff 0  
  155.     nreloc 0  
  156.      flags 0x00000007  
  157.  reserved1 5 (index into indirect symbol table)  
  158.  reserved2 0  
  159. Load command 3  
  160.       cmd LC_SEGMENT_64  
  161.   cmdsize 72  
  162.   segname __LINKEDIT  
  163.    vmaddr 0x0000000100002000  
  164.    vmsize 0x0000000000001000  
  165.   fileoff 8192  
  166.  filesize 916  
  167.   maxprot 0x00000007  
  168.  initprot 0x00000001  
  169.    nsects 0  
  170.     flags 0x0  
  171. Load command 4  
  172.             cmd LC_DYLD_INFO_ONLY  
  173.         cmdsize 48  
  174.      rebase_off 8192  
  175.     rebase_size 8  
  176.        bind_off 8200  
  177.       bind_size 56  
  178.   weak_bind_off 0  
  179.  weak_bind_size 0  
  180.   lazy_bind_off 8256  
  181.  lazy_bind_size 40  
  182.      export_off 8296  
  183.     export_size 80  
  184. Load command 5  
  185.      cmd LC_SYMTAB  
  186.  cmdsize 24  
  187.   symoff 8408  
  188.    nsyms 24  
  189.   stroff 8820  
  190.  strsize 288  
  191. Load command 6  
  192.             cmd LC_DYSYMTAB  
  193.         cmdsize 80  
  194.       ilocalsym 0  
  195.       nlocalsym 16  
  196.      iextdefsym 16  
  197.      nextdefsym 4  
  198.       iundefsym 20  
  199.       nundefsym 4  
  200.          tocoff 0  
  201.            ntoc 0  
  202.       modtaboff 0  
  203.         nmodtab 0  
  204.    extrefsymoff 0  
  205.     nextrefsyms 0  
  206.  indirectsymoff 8792  
  207.   nindirectsyms 7  
  208.       extreloff 0  
  209.         nextrel 0  
  210.       locreloff 0  
  211.         nlocrel 0  
  212. Load command 7  
  213.           cmd LC_LOAD_DYLINKER  
  214.       cmdsize 32  
  215.          name /usr/lib/dyld (offset 12)  
  216. Load command 8  
  217.      cmd LC_UUID  
  218.  cmdsize 24  
  219.     uuid F88FCA7D-3FE0-3556-96A4-4F29B7812D93  
  220. Load command 9  
  221.       cmd LC_VERSION_MIN_MACOSX  
  222.   cmdsize 16  
  223.   version 10.9  
  224.       sdk 10.9  
  225. Load command 10  
  226.       cmd LC_SOURCE_VERSION  
  227.   cmdsize 16  
  228.   version 0.0  
  229. Load command 11  
  230.        cmd LC_MAIN  
  231.    cmdsize 24  
  232.   entryoff 3760  
  233.  stacksize 0  
  234. Load command 12  
  235.           cmd LC_LOAD_DYLIB  
  236.       cmdsize 56  
  237.          name /usr/lib/libSystem.B.dylib (offset 24)  
  238.    time stamp 2 Thu Jan  1 08:30:02 1970  
  239.       current version 1197.1.1  
  240. compatibility version 1.0.0  
  241. Load command 13  
  242.       cmd LC_FUNCTION_STARTS  
  243.   cmdsize 16  
  244.   dataoff 8376  
  245.  datasize 8  
  246. Load command 14  
  247.       cmd LC_DATA_IN_CODE  
  248.   cmdsize 16  
  249.   dataoff 8384  
  250.  datasize 0  
  251. Load command 15  
  252.       cmd LC_DYLIB_CODE_SIGN_DRS  
  253.   cmdsize 16  
  254.   dataoff 8384  
  255.  datasize 24  

符號表的查看使用nm -px insertsort。-p 原始順序,不做symbol字母或者數(shù)字排序。-x 16進制表示 

  1. oliverluan@localhost:~/Documents/Opt/insertsort$ nm -px insertsort  
  2. 0000000100001020 0f 09 0000 00000000000000a9 _L  
  3. 0000000100000000 0f 01 0010 00000000000000ac __mh_execute_header  
  4. 0000000100000dd0 0f 01 0000 00000000000000c0 _insert_sort  
  5. 0000000100000f20 0f 01 0000 00000000000000cd _main  
  6. 0000000100000ea0 0f 01 0000 00000000000000d3 _print_array  
  7. 0000000100001034 0f 09 0000 00000000000000e0 _size  
  8. 0000000000000000 01 00 0100 00000000000000e6 _printf  
  9. 0000000000000000 01 00 0100 00000000000000ee dyld_stub_binder  


 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产精品不卡高清在线观看| 国产对白老熟女正在播放| 亚洲高清中文字幕一区二区三区| 好吊妞视频只有这里有精品| 国产又色又爽又黄的精品视频| 污污黄黄的成年亚洲毛片| 好吊妞视频这里有精品| 久久精品a毛片看国产成人| 麻豆国产精品一区二区| 国产精品尹人香蕉综合网| 免费午夜福利不卡片在线 视频| 最近日韩在线免费黄片| 丰满人妻熟妇乱又乱精品古代 | 日韩精品在线观看完整版| 一区二区三区国产日韩| 国产福利一区二区久久| 国内九一激情白浆发布| 人妻巨大乳一二三区麻豆| 亚洲国产精品久久精品成人| 在线观看免费视频你懂的| 亚洲精品成人综合色在线| 都市激情小说在线一区二区三区| 亚洲国产成人爱av在线播放下载| 精品亚洲av一区二区三区| 夫妻性生活一级黄色录像| 青青免费操手机在线视频| 美女激情免费在线观看| 99免费人成看国产片| 国产二级一级内射视频播放 | 日韩精品一区二区三区含羞含羞草| 亚洲一区二区三区国产| 国产福利一区二区久久| 国产高清在线不卡一区| 欧美尤物在线视频91| 色老汉在线视频免费亚欧| 国产一级特黄在线观看| 日本午夜免费观看视频| 日韩人妻av中文字幕| 免费久久一级欧美特大黄孕妇| 精品高清美女精品国产区| 日韩精品综合福利在线观看|