国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

X86_64函數(shù)調(diào)用匯編程序分析

這篇具有很好參考價值的文章主要介紹了X86_64函數(shù)調(diào)用匯編程序分析。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1 X86_64寄存器使用標準

  • %rdi, %rsi, %rdx, %rcx, %r8, %r9分別用于函數(shù)調(diào)用過程中的前6個參數(shù),對于6的參數(shù)存放在棧中傳遞
  • %rsp用做棧指針寄存器,指向棧頂
  • %rbp用作??蚣拇嫫鳎赶驐5?/li>
  • %rax用做函數(shù)返回值的第一個寄存器

X86_64函數(shù)調(diào)用匯編程序分析,x86_64,X86函數(shù)調(diào)用匯編程序分析,X86_64函數(shù)調(diào)用程序分析

2 對應代碼的分析

2.1 main函數(shù)及其對應的匯編程序

int main(void)
{
        long a = 1;
        long b = 2;                                                                         

        printf("The current function is %s a:%ld b:%ld\r\n", __func__, a, b); 

        test_fun_a(a, b, 0, 1); 

        a = a + b;
        b = a + b;

        return 0;
}

2.1.1 main的C代碼實現(xiàn)

2.1.2 main函數(shù)對應匯編及其分析

這段匯編代碼實現(xiàn)了一個簡單的程序,其功能如下:

  1. 首先,endbr64指令用于清除處理器的前瞻指令緩存,確保后面的指令正確執(zhí)行。
  2. push %rbpmov %rsp,%rbp這兩個指令用于保存和設置棧幀的基址指針(Base Pointer)。
  3. sub $0x10,%rsp指令用于為局部變量和保存的寄存器值分配棧空間。
  4. movq $0x1,-0x10(%rbp)movq $0x2,-0x8(%rbp)這兩個指令用于將字面量1和2存儲到棧中的特定位置。
  5. mov -0x8(%rbp),%rdxmov -0x10(%rbp),%rax這兩個指令用于從棧中獲取之前保存的值。
  6. mov %rdx,%rcxmov %rax,%rdx這兩個指令用于將寄存器的值進行傳遞,為后面的函數(shù)調(diào)用做準備。
  7. lea 0xdf8(%rip),%rsilea 0xda6(%rip),%rdi這兩個指令用于設置printf函數(shù)的參數(shù),分別對應格式字符串和要打印的變量。
  8. mov $0x0,%eax指令用于設置系統(tǒng)調(diào)用的編號(這里為0,即系統(tǒng)調(diào)用號)。
  9. callq 1050 <printf@plt>這個指令發(fā)起系統(tǒng)調(diào)用,執(zhí)行printf函數(shù),打印輸出指定的字符串和數(shù)值。
  10. 接下來,mov -0x8(%rbp),%rsimov -0x10(%rbp),%rax、mov $0x1,%ecxmov $0x0,%edxmov %rax,%rdi這些指令用于設置函數(shù)test_fun_a的參數(shù)。
  11. callq 11e8 <test_fun_a>這個指令調(diào)用函數(shù)test_fun_a,執(zhí)行其代碼。
  12. 在函數(shù)test_fun_a執(zhí)行完成后,通過一系列的移動和加法操作,將返回值存儲回原始的參數(shù)位置。
  13. 最后,mov $0x0,%eax、leaveqretq這些指令用于清理棧幀、結束當前函數(shù)并返回。

這段匯編代碼的功能是調(diào)用函數(shù)test_fun_a,并打印輸出兩個數(shù)值1和2,然后調(diào)用函數(shù)test_fun_a并將返回值存儲回原始的參數(shù)位置。

000000000000128a <main>:
    128a:	f3 0f 1e fa          	endbr64 
    128e:	55                   	push   %rbp
    128f:	48 89 e5             	mov    %rsp,%rbp
    1292:	48 83 ec 10          	sub    $0x10,%rsp
    1296:	48 c7 45 f0 01 00 00 	movq   $0x1,-0x10(%rbp)
    129d:	00 
    129e:	48 c7 45 f8 02 00 00 	movq   $0x2,-0x8(%rbp)
    12a5:	00 
    12a6:	48 8b 55 f8          	mov    -0x8(%rbp),%rdx
    12aa:	48 8b 45 f0          	mov    -0x10(%rbp),%rax
    12ae:	48 89 d1             	mov    %rdx,%rcx
    12b1:	48 89 c2             	mov    %rax,%rdx
    12b4:	48 8d 35 f8 0d 00 00 	lea    0xdf8(%rip),%rsi        # 20b3 <__func__.2519>
    12bb:	48 8d 3d a6 0d 00 00 	lea    0xda6(%rip),%rdi        # 2068 <_IO_stdin_used+0x68>
    12c2:	b8 00 00 00 00       	mov    $0x0,%eax
    12c7:	e8 84 fd ff ff       	callq  1050 <printf@plt>
    12cc:	48 8b 75 f8          	mov    -0x8(%rbp),%rsi
    12d0:	48 8b 45 f0          	mov    -0x10(%rbp),%rax
    12d4:	b9 01 00 00 00       	mov    $0x1,%ecx
    12d9:	ba 00 00 00 00       	mov    $0x0,%edx
    12de:	48 89 c7             	mov    %rax,%rdi
    12e1:	e8 02 ff ff ff       	callq  11e8 <test_fun_a>
    12e6:	48 8b 45 f8          	mov    -0x8(%rbp),%rax
    12ea:	48 01 45 f0          	add    %rax,-0x10(%rbp)
    12ee:	48 8b 45 f0          	mov    -0x10(%rbp),%rax
    12f2:	48 01 45 f8          	add    %rax,-0x8(%rbp)
    12f6:	b8 00 00 00 00       	mov    $0x0,%eax
    12fb:	c9                   	leaveq 
    12fc:	c3                   	retq   
    12fd:	0f 1f 00             	nopl   (%rax)

2.1.3 執(zhí)行完成之后棧的存放情況

2.1.3.1 main函數(shù)執(zhí)行開棧以及局部變量壓棧之后的棧結構

X86_64函數(shù)調(diào)用匯編程序分析,x86_64,X86函數(shù)調(diào)用匯編程序分析,X86_64函數(shù)調(diào)用程序分析

2.1.3.2 main函數(shù)調(diào)用test_fun_a時的棧結構
  • 執(zhí)行callq 11e8 <test_fun_a>時會把調(diào)用test_fun_a的返回地址壓到棧頂,會導致%rsp向下偏移8Byte

X86_64函數(shù)調(diào)用匯編程序分析,x86_64,X86函數(shù)調(diào)用匯編程序分析,X86_64函數(shù)調(diào)用程序分析

2.2 test_fun_a函數(shù)及其對應的匯編程序

2.2.1 test_fun_a函數(shù)的C實現(xiàn)

void test_fun_a(long m, long n, long x, long y)
{
        long a = x;
        long b = 2;
        long c = 3;

        printf("The current function is %s b:%ld c:%ld\r\n", __func__, b, c); 

        test_fun_b(b, c, a, 2); 

        b = b + c + m;
        c = b + c + n;
}

2.2.2 test_fun_a函數(shù)對應匯編及其分析

這段匯編代碼是一個函數(shù)test_fun_a的實現(xiàn),其功能大致如下:

  1. push %rbpmov %rsp,%rbp 用于保存和設置棧幀的基址指針(Base Pointer)。
  2. sub $0x40,%rsp 用于為局部變量和保存的寄存器值分配棧空間。
  3. mov %rdi,-0x28(%rbp)mov %rsi,-0x30(%rbp)、mov %rdx,-0x38(%rbp)mov %rcx,-0x40(%rbp) 用于將參數(shù)傳遞到棧幀中的指定位置。
  4. mov %rax,-0x18(%rbp) 將某個值(可能是函數(shù)內(nèi)的臨時變量或計算結果)保存到棧幀的另一個位置。
  5. movq $0x2,-0x10(%rbp)movq $0x3,-0x8(%rbp) 用于將字面量值2和3存儲到棧中的特定位置。
  6. mov -0x8(%rbp),%rdxmov -0x10(%rbp),%rax 用于從棧中獲取之前保存的值。
  7. lea 0xe77(%rip),%rsilea 0xe00(%rip),%rdi 用于設置printf函數(shù)的參數(shù),分別對應格式字符串和要打印的變量。
  8. mov $0x0,%eax 用于設置系統(tǒng)調(diào)用的編號(這里為0,即系統(tǒng)調(diào)用號)。
  9. callq 1050 <printf@plt> 發(fā)起系統(tǒng)調(diào)用,執(zhí)行printf函數(shù),打印輸出指定的字符串和數(shù)值。
  10. mov -0x18(%rbp),%rdx、mov -0x8(%rbp),%rsi、mov -0x10(%rbp),%rax、mov $0x2,%ecxmov %rax,%rdi 用于設置函數(shù)test_fun_b的參數(shù)。
  11. callq 1149 <test_fun_b> 調(diào)用函數(shù)test_fun_b,執(zhí)行其代碼。
  12. 在函數(shù)test_fun_b執(zhí)行完成后,將返回值存儲到棧幀的特定位置。
  13. 最后,通過一系列的移動和加法操作,將計算結果存儲回原始的第一個參數(shù)的位置。
  14. 48 8b 45 d0 mov -0x30(%rbp),%rax: 將棧幀中偏移為-0x30的位置的值加載到寄存器rax中。
  15. 48 01 d0 add %rdx,%rax: 將rax和rdx寄存器的值相加,并將結果存儲回rax寄存器中。
  16. 48 89 45 f8 mov %rax,-0x8(%rbp): 將rax寄存器的值存儲回棧幀中偏移為-0x8的位置。
  17. 90: 無操作,用于填充指令。
  18. c9: leaveq指令用于撤銷棧幀,恢復調(diào)用前的堆棧狀態(tài)。
  19. c3: retq指令用于從當前函數(shù)返回,返回到調(diào)用者的代碼位置。
00000000000011e8 <test_fun_a>:
    11e8:	f3 0f 1e fa          	endbr64 
    11ec:	55                   	push   %rbp
    11ed:	48 89 e5             	mov    %rsp,%rbp
    11f0:	48 83 ec 40          	sub    $0x40,%rsp
    11f4:	48 89 7d d8          	mov    %rdi,-0x28(%rbp)
    11f8:	48 89 75 d0          	mov    %rsi,-0x30(%rbp)
    11fc:	48 89 55 c8          	mov    %rdx,-0x38(%rbp)
    1200:	48 89 4d c0          	mov    %rcx,-0x40(%rbp)
    1204:	48 8b 45 c8          	mov    -0x38(%rbp),%rax
    1208:	48 89 45 e8          	mov    %rax,-0x18(%rbp)
    120c:	48 c7 45 f0 02 00 00 	movq   $0x2,-0x10(%rbp)
    1213:	00 
    1214:	48 c7 45 f8 03 00 00 	movq   $0x3,-0x8(%rbp)
    121b:	00 
    121c:	48 8b 55 f8          	mov    -0x8(%rbp),%rdx
    1220:	48 8b 45 f0          	mov    -0x10(%rbp),%rax
    1224:	48 89 d1             	mov    %rdx,%rcx
    1227:	48 89 c2             	mov    %rax,%rdx
    122a:	48 8d 35 77 0e 00 00 	lea    0xe77(%rip),%rsi        # 20a8 <__func__.2513>
    1231:	48 8d 3d 00 0e 00 00 	lea    0xe00(%rip),%rdi        # 2038 <_IO_stdin_used+0x38>
    1238:	b8 00 00 00 00       	mov    $0x0,%eax
    123d:	e8 0e fe ff ff       	callq  1050 <printf@plt>
    1242:	48 8b 55 e8          	mov    -0x18(%rbp),%rdx
    1246:	48 8b 75 f8          	mov    -0x8(%rbp),%rsi
    124a:	48 8b 45 f0          	mov    -0x10(%rbp),%rax
    124e:	b9 02 00 00 00       	mov    $0x2,%ecx
    1253:	48 89 c7             	mov    %rax,%rdi
    1256:	e8 ee fe ff ff       	callq  1149 <test_fun_b>
    125b:	48 8b 55 f0          	mov    -0x10(%rbp),%rdx
    125f:	48 8b 45 f8          	mov    -0x8(%rbp),%rax
    1263:	48 01 c2             	add    %rax,%rdx
    1266:	48 8b 45 d8          	mov    -0x28(%rbp),%rax
    126a:	48 01 d0             	add    %rdx,%rax
    126d:	48 89 45 f0          	mov    %rax,-0x10(%rbp)
    1271:	48 8b 55 f0          	mov    -0x10(%rbp),%rdx
    1275:	48 8b 45 f8          	mov    -0x8(%rbp),%rax
    1279:	48 01 c2             	add    %rax,%rdx
    127c:	48 8b 45 d0          	mov    -0x30(%rbp),%rax
    1280:	48 01 d0             	add    %rdx,%rax
    1283:	48 89 45 f8          	mov    %rax,-0x8(%rbp)
    1287:	90                   	nop
    1288:	c9                   	leaveq 
    1289:	c3                   	retq

2.2.3 執(zhí)行完成之后棧幀的使用情況

2.2.3.1 test_fun_a函數(shù)執(zhí)行開棧之后的棧結構示意圖

X86_64函數(shù)調(diào)用匯編程序分析,x86_64,X86函數(shù)調(diào)用匯編程序分析,X86_64函數(shù)調(diào)用程序分析

2.2.3.2 test_fun_a函數(shù)執(zhí)行參數(shù)壓棧以及局部變量壓棧之后的棧結構示意圖

X86_64函數(shù)調(diào)用匯編程序分析,x86_64,X86函數(shù)調(diào)用匯編程序分析,X86_64函數(shù)調(diào)用程序分析

2.2.3.3 test_fun_a函數(shù)調(diào)用test_fun_b之后的棧結構示意圖
  • callq 1149 <test_fun_b>該調(diào)指令會導致%rsp向下偏移8Byte以保存test_fun_a函數(shù)調(diào)用test_fun_b的返回地址

X86_64函數(shù)調(diào)用匯編程序分析,x86_64,X86函數(shù)調(diào)用匯編程序分析,X86_64函數(shù)調(diào)用程序分析

2.3 test_fun_b函數(shù)及其對應的匯編程序

2.3.1 test_func_b函數(shù)的C實現(xiàn)

void test_fun_b(long m, long n, long x, long y)
{
        long a = y;
        long b = m;
        long c = 3;
        long d = 4;

        printf("The current function is %s c:%ld d:%ld\r\n", __func__, c, d);

        c = c + d + m + a;
        d = c + d + n + b;                                                                  
}

2.3.2 test_fun_b函數(shù)對應匯編及其分析

這段匯編代碼是一個函數(shù)test_fun_b的實現(xiàn)。下面是對代碼的逐行解釋:

1149: f3 0f 1e fa - endbr64指令用于結束64位BR(Branch Prediction)指令的預測。

114d: 55 - push %rbp將當前棧幀的基址指針(Base Pointer,簡稱RBp)壓入棧中,為新的棧幀做準備。

114e: 48 89 e5 - mov %rsp,%rbp將當前棧幀的棧指針(Stack Pointer,簡稱SP)復制給基址指針(RBp),建立新的棧幀。

1151: 48 83 ec 40 - sub $0x40,%rsp從SP中減去0x40個字節(jié),擴展棧空間。

1155: 48 89 7d d8 - mov %rdi,-0x28(%rbp)將函數(shù)參數(shù)rdi的值存儲到當前棧幀的-0x28位置。

1159: 48 89 75 d0 - mov %rsi,-0x30(%rbp)將函數(shù)參數(shù)rsi的值存儲到當前棧幀的-0x30位置。

115d: 48 89 55 c8 - mov %rdx,-0x38(%rbp)將函數(shù)參數(shù)rdx的值存儲到當前棧幀的-0x38位置。

1161: 48 89 4d c0 - mov %rcx,-0x40(%rbp)將函數(shù)參數(shù)rcx的值存儲到當前棧幀的-0x40位置。

1165: 48 8b 45 c0 - mov -0x40(%rbp),%rax將當前棧幀的-0x40位置的值加載到寄存器rax中。

1169: 48 89 45 e0 - mov %rax,-0x20(%rbp)將寄存器rax的值存儲到當前棧幀的-0x20位置。

116d: 48 8b 45 d8 - mov -0x28(%rbp),%rax將當前棧幀的-0x28位置的值加載到寄存器rax中。

1171: 48 89 45 e8 - mov %rax,-0x18(%rbp)將寄存器rax的值存儲到當前棧幀的-0x18位置。

1175: 48 c7 45 f0 03 00 00 00 - movq $0x3,-0x10(%rbp)將立即數(shù)0x3存儲到當前棧幀的-0x10位置。
117d: 48 c7 45 f8 04 00 00 00 - movq $0x4,-0x8(%rbp)將立即數(shù)0x4存儲到當前棧幀的-0x8位置。

1185: 48 8b 55 f8 - mov -0x8(%rbp),%rdx將當前棧幀的-0x8位置的值加載到寄存器rdx中。

1189: 48 8b 45 f0 - mov -0x10(%rbp),%rax將當前棧幀的-0x10位置的值加載到寄存器rax中。

118d: 48 89 d1 - mov %rdx,%rcx將寄存器rdx的值復制給rcx。

1190: 48 89 c2 - mov %rax,%rdx將寄存器rax的值復制給rdx。

1193: 48 8d 35 fe 0e 00 00 - lea 0xefe(%rip),%rsi將相對地址0xefe處的值加載到寄存器rsi。

119a: 48 8d 3d 67 0e 00 00 - lea 0xe67(%rip),%rdi將相對地址0xe67處的值加載到寄存器rdi。

11a1: b8 00 00 00 00 - mov $0x0,%eax將立即數(shù)0x0加載到寄存器eax。

11a6: e8 a5 fe ff ff - callq 1050 <printf@plt>調(diào)用函數(shù)plt的printf函數(shù),跳轉(zhuǎn)到地址1050處執(zhí)行。

接下來的指令繼續(xù)處理計算結果,并執(zhí)行一些算術操作。

11ab: 48 8b 55 f0 - mov -0x10(%rbp),%rdx將當前棧幀的-0x10位置的值加載到寄存器rdx中。

11af: 48 8b 45 f8 - mov -0x8(%rbp),%rax將當前棧幀的-0x8位置的值加載到寄存器rax中。

11b3: 48 01 c2 - add %rax,%rdx將寄存器rax和rdx的值相加,結果存儲在rdx中。

11b6: 48 8b 45 d8 - mov -0x28(%rbp),%rax將當前棧幀的-0x28位置的值加載到寄存器rax中。

11bd: 48 01 c2 - add %rax,%rdx將寄存器rax和rdx的值相加,結果存儲在rdx中。

11c1: 48 8b 45 e0 - mov -0x20(%rbp),%rax將當前棧幀的-0x20位置的值加載到寄存器rax中。

11c4: 48 01 d0 - add %rdx,%rax將寄存器rdx和rax的值相加,結果存儲在rax中。

11c8: 48 89 45 f0 - mov %rax,-0x10(%rbp)將寄存器rax的值存儲到當前棧幀的-0x10位置。

11cc: 48 8b 45 f8 mov -0x8(%rbp),%rax將當前棧幀的-0x8位置的值加載到rax寄存器中

11d0: 48 01 c2 add %rax,%rdx將寄存器rax和rdx的值相加,結果存儲在rdx中。

11d3: 48 8b 45 d0 mov -0x30(%rbp),%rax將當前棧幀的-0x30位置的值加載到rax寄存器中

11d7: 48 01 c2 add %rax,%rdx 將寄存器rax和rdx的值相加,結果存儲在rdx中。

11da: 48 8b 45 e8 mov -0x18(%rbp),%rax將當前棧幀的-0x18位置的值加載到rax寄存器中

11de: 48 01 d0 add %rdx,%rax 將寄存器rdx和rax的值相加,結果存儲在rax中。

11e1: 48 89 45 f8 mov %rax,-0x8(%rbp)將寄存器rax的值存儲到當前棧幀的-0x8位置。

11e5: 90 nop

11e6: c9 leaveq 撤銷棧幀,恢復調(diào)用前的堆棧狀態(tài)。

11e7: c3 retq從當前函數(shù)返回,返回到調(diào)用者的代碼位置。

0000000000001149 <test_fun_b>:
    1149:	f3 0f 1e fa          	endbr64 
    114d:	55                   	push   %rbp
    114e:	48 89 e5             	mov    %rsp,%rbp
    1151:	48 83 ec 40          	sub    $0x40,%rsp
    1155:	48 89 7d d8          	mov    %rdi,-0x28(%rbp)
    1159:	48 89 75 d0          	mov    %rsi,-0x30(%rbp)
    115d:	48 89 55 c8          	mov    %rdx,-0x38(%rbp)
    1161:	48 89 4d c0          	mov    %rcx,-0x40(%rbp)
    1165:	48 8b 45 c0          	mov    -0x40(%rbp),%rax
    1169:	48 89 45 e0          	mov    %rax,-0x20(%rbp)
    116d:	48 8b 45 d8          	mov    -0x28(%rbp),%rax
    1171:	48 89 45 e8          	mov    %rax,-0x18(%rbp)
    1175:	48 c7 45 f0 03 00 00 	movq   $0x3,-0x10(%rbp)
    117c:	00 
    117d:	48 c7 45 f8 04 00 00 	movq   $0x4,-0x8(%rbp)
    1184:	00 
    1185:	48 8b 55 f8          	mov    -0x8(%rbp),%rdx
    1189:	48 8b 45 f0          	mov    -0x10(%rbp),%rax
    118d:	48 89 d1             	mov    %rdx,%rcx
    1190:	48 89 c2             	mov    %rax,%rdx
    1193:	48 8d 35 fe 0e 00 00 	lea    0xefe(%rip),%rsi        # 2098 <__func__.2503>
    119a:	48 8d 3d 67 0e 00 00 	lea    0xe67(%rip),%rdi        # 2008 <_IO_stdin_used+0x8>
    11a1:	b8 00 00 00 00       	mov    $0x0,%eax
    11a6:	e8 a5 fe ff ff       	callq  1050 <printf@plt>
    11ab:	48 8b 55 f0          	mov    -0x10(%rbp),%rdx
    11af:	48 8b 45 f8          	mov    -0x8(%rbp),%rax
    11b3:	48 01 c2             	add    %rax,%rdx
    11b6:	48 8b 45 d8          	mov    -0x28(%rbp),%rax
    11ba:	48 01 c2             	add    %rax,%rdx
    11bd:	48 8b 45 e0          	mov    -0x20(%rbp),%rax
    11c1:	48 01 d0             	add    %rdx,%rax
    11c4:	48 89 45 f0          	mov    %rax,-0x10(%rbp)
    11c8:	48 8b 55 f0          	mov    -0x10(%rbp),%rdx
    11cc:	48 8b 45 f8          	mov    -0x8(%rbp),%rax
    11d0:	48 01 c2             	add    %rax,%rdx
    11d3:	48 8b 45 d0          	mov    -0x30(%rbp),%rax
    11d7:	48 01 c2             	add    %rax,%rdx
    11da:	48 8b 45 e8          	mov    -0x18(%rbp),%rax
    11de:	48 01 d0             	add    %rdx,%rax
    11e1:	48 89 45 f8          	mov    %rax,-0x8(%rbp)
    11e5:	90                   	nop
    11e6:	c9                   	leaveq 
    11e7:	c3                   	retq

2.3.3 執(zhí)行完成之后棧幀的使用情況

2.3.3.1 test_fun_b函數(shù)執(zhí)行開棧之后的棧結構示意圖

X86_64函數(shù)調(diào)用匯編程序分析,x86_64,X86函數(shù)調(diào)用匯編程序分析,X86_64函數(shù)調(diào)用程序分析

2.3.3.2 test_fun_a函數(shù)執(zhí)行參數(shù)壓棧以及局部變量壓棧之后的棧結構示意圖

X86_64函數(shù)調(diào)用匯編程序分析,x86_64,X86函數(shù)調(diào)用匯編程序分析,X86_64函數(shù)調(diào)用程序分析

3 X86_64 函數(shù)調(diào)用示例及其棧幀示意圖

X86_64函數(shù)調(diào)用匯編程序分析,x86_64,X86函數(shù)調(diào)用匯編程序分析,X86_64函數(shù)調(diào)用程序分析

4 編譯和反匯編的命令

4.1 編譯的命令

x86_64-linux-gnu-gcc  -Wl,--no-as-needed main.c -o x86_test

4.2 反匯編的命令

若是想把生成的反匯編程序保存的文件可以使用這個反匯編的命令:x86_64-linux-gnu-objdump -S -d x86_test > x86_64_test.S文章來源地址http://www.zghlxwxcb.cn/news/detail-699581.html

x86_64-linux-gnu-objdump -S -d x86_test

到了這里,關于X86_64函數(shù)調(diào)用匯編程序分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 使用IDA查看匯編代碼,結合安卓系統(tǒng)生成的Tombstone文件,分析安卓app程序崩潰問題

    目錄 1、IDA工具介紹 2、產(chǎn)品及問題場景描述 3、查看Tombstone文件

    2024年02月13日
    瀏覽(22)
  • 《算法還原 - CTF》逆向exe程序 + ida Pro 反匯編分析偽C代碼 + python算法復現(xiàn)

    《算法還原 - CTF》逆向exe程序 + ida Pro 反匯編分析偽C代碼 + python算法復現(xiàn)

    二進制安全,能干什么 逆向分析: 負責成品軟件的技術原理. 比如分析競品軟件,吸取技術上的優(yōu)點,進行技術難點公關 病毒分析: 負責分析病毒樣本.研究惡意代碼的技術手段等工作.主要是在安全公司,尤其是在殺毒軟件公司需求較多.如360 、騰訊電腦管家等. 漏洞挖掘分析: 負責

    2024年01月22日
    瀏覽(57)
  • ARM匯編 : 匯編指令,偽指令,匯編程序格式

    ARM匯編 : 匯編指令,偽指令,匯編程序格式

    計算機的指令集一般可分為4種: 復雜指令集(CISC) 精簡指令集(RISC) 顯式并行指令集(EPIC) 超長指令字指令集(VLIW) ARM指令集屬于RISC,RISC相對于CISC指令集,主要有以下特點: ●Load/Store架構,CPU不能直接處理內(nèi)存中的數(shù)據(jù),要先將內(nèi)存中的數(shù)據(jù)Load(加載)到寄存器中

    2024年02月12日
    瀏覽(19)
  • 微機實驗第一章:匯編程序的建立和簡單的順序結構匯編程序設計(B站)

    微機實驗第一章:匯編程序的建立和簡單的順序結構匯編程序設計(B站)

    作為一名在校大學生,我將近期所學的知識進行總結。 一年之后我再看這些代碼,我發(fā)現(xiàn)這些代碼對于初學者十分友好。因此,我將這些代碼分享給大家,希望大家能有所收獲。如有不足,歡迎交流。 推薦可以看這位B站up主的視頻學習匯編 B站up主 提示:以下是本篇文章正文

    2024年02月06日
    瀏覽(87)
  • [ARM 匯編]高級部分—性能優(yōu)化與調(diào)試—3.4.2 ARM匯編程序調(diào)試技巧

    [ARM 匯編]高級部分—性能優(yōu)化與調(diào)試—3.4.2 ARM匯編程序調(diào)試技巧

    在ARM匯編程序開發(fā)過程中,調(diào)試是一個關鍵環(huán)節(jié)。適當?shù)恼{(diào)試技巧可以幫助我們更快地定位問題、解決問題,從而提高開發(fā)效率。本節(jié)將講解一些ARM匯編程序的調(diào)試技巧,并通過實例進行講解。 使用GDB調(diào)試 GDB(GNU調(diào)試器)是一個功能強大的調(diào)試工具,它支持ARM匯編程序的調(diào)

    2024年02月10日
    瀏覽(28)
  • nas匯編程序的調(diào)試排錯方法

    nas匯編程序的調(diào)試排錯方法

    nas匯編程序的調(diào)試排錯方法: 1、查找是哪一步錯了 2、查看對應的*.lst文件,本例中是\\\"asmhead.lst\\\" 3、根據(jù)*.lst文件的[ERROR #002]提示查看源碼,改錯。 4、重新運行編譯,OK nask.exe編譯匯編程序時出錯了 在文件中根據(jù)\\\"[ERROR\\\"查找就可以了。 E:techdoc30dayOScodeday03boyIasmhea

    2024年02月09日
    瀏覽(16)
  • C/C++源程序到可執(zhí)行程序exe的全過程(及匯編和反匯編的區(qū)別)

    C/C++源程序到可執(zhí)行程序exe的全過程(及匯編和反匯編的區(qū)別)

    1.C/C++源程序到可執(zhí)行程序exe的全過程(及匯編和反匯編的區(qū)別) 一個現(xiàn)代編譯器的主要工作流程如下: 源程序(source code)→預處理器(preprocessor)→編譯器(compiler)→匯編程序(assembler)→目標程序(object code)→連接器(鏈接器,Linker)→可執(zhí)行程序(executables)。 簡

    2024年02月10日
    瀏覽(20)
  • 【匯編】實驗11 編寫子程序

    【匯編】實驗11 編寫子程序

    綜合一下學過的指令就行了,比較簡單。

    2024年01月16日
    瀏覽(28)
  • 【proteus】8086 寫一個匯編程序并調(diào)試

    【proteus】8086 寫一個匯編程序并調(diào)試

    參考書籍:微機原理與接口技術——基于8086和Proteus仿真(第3版)p103-105,p119-122. 參考程序是p70,例4-1 在上一篇的基礎上:? 創(chuàng)建項目和匯編文件 ?雙擊8086的元件圖: 可以修改size? 比如這里修改成: 在asm中寫一個簡單的匯編程序: 編譯: ?編譯通過: 選中內(nèi)存和寄存器窗

    2024年02月08日
    瀏覽(15)
  • 南京郵電大學匯編語言程序設計實驗一(匯編語言語法練習與代碼轉(zhuǎn)換)

    南京郵電大學匯編語言程序設計實驗一(匯編語言語法練習與代碼轉(zhuǎn)換)

    排除語法錯誤:給出的是一個通過比較法完成8位二進制數(shù)轉(zhuǎn)換成十進制數(shù)送屏幕顯示功能的匯編語言源程序,但有很多語法錯誤。要求實驗者按照原樣對源程序進行編輯,匯編后,根據(jù)TASM給出的信息對源程序進行修改,知道沒有語法錯誤為止。然后進行鏈接,并執(zhí)行相應可

    2024年02月08日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包