題目來源:https://class.nckuctf.org/challenges#Ez_asm0-46
asm1.txt:
<+0>: endbr64
<+4>: push rbp
<+5>: mov rbp,rsp
<+8>: mov DWORD PTR [rbp-0x14],edi
<+11>: mov QWORD PTR [rbp-0x20],rsi
<+15>: mov DWORD PTR [rbp-0x4],0x9fe1a
<+22>: mov eax,DWORD PTR [rbp-0x4]
<+25>: pop rbp
<+26>: ret
重點行數:<+15>: mov DWORD PTR [rbp-0x4],0x9fe1a
<+22>: mov eax,DWORD PTR [rbp-0x4]
<+15> 將 0x9fe1a 儲存到記憶體位址 [rbp-0x4]
<+22> 將記憶體位址 [rbp-0x4] 中的值儲存到暫存器 eax
因此將 0x9fe1a 進行進制轉換,9fe1a(16進制) = 654874(10進制)
依此可得出解答
題目來源:https://class.nckuctf.org/challenges#Ez_asm0-47
asm2.txt:
<+0>: endbr64
<+4>: push rbp
<+5>: mov rbp,rsp
<+8>: mov DWORD PTR [rbp-0x14],edi
<+11>: mov QWORD PTR [rbp-0x20],rsi
<+15>: mov DWORD PTR [rbp-0xc],0x9fe1a
<+22>: mov DWORD PTR [rbp-0x8],0x4
<+29>: mov eax,DWORD PTR [rbp-0xc]
<+32>: imul eax,DWORD PTR [rbp-0x8]
<+36>: add eax,0x1f5
<+41>: mov DWORD PTR [rbp-0x4],eax
<+44>: mov eax,DWORD PTR [rbp-0x4]
<+47>: pop rbp
<+48>: ret
重點行數:<+15>: mov DWORD PTR [rbp-0xc],0x9fe1a
<+22>: mov DWORD PTR [rbp-0x8],0x4
<+29>: mov eax,DWORD PTR [rbp-0xc]
<+32>: imul eax,DWORD PTR [rbp-0x8]
<+36>: add eax,0x1f5
<+15> 將 0x9fe1a 儲存到記憶體位址 [rbp-0xc]
<+22> 將 0x4 儲存到記憶體位址 [rbp-0x8]
<+29> 將記憶體位址 [rbp-0xc] 中的值儲存到暫存器 eax
<+32> 將記憶體位址 [rbp-0x8] 中的值乘上暫存器 eax 的值,再存回暫存器 eax
<+36> 將 0x1f5 加上暫存器 eax 的值,再存回暫存器 eax
因此,
eax = 0x9fe1a * 0x4 + 0x1f5
654874 * 4 + 501 = 2619997
依此可得出解答