[英]I try to understand [c code -> assembly] code
我試着理解 [c 代碼 -> 匯編] 代碼
void node::Check( data & _data1, vector<data2*>& _data2)
{
-> push ebp
-> mov ebp,esp
-> push ebx
if (TryToCheck(_data1.a, _data1.b))
-> mov ebx,dword ptr [_data1]
我不確定這行是做什么的 這行是什么意思,
push esi mov esi,ecx
據我所知, ecx
是一個計數值。 為什么要在esi
保存ecx
的值?
mov eax,dword ptr [esi+50h]
這意味着什么值, 50h
?
mov eax,dword ptr [eax+4] lea edx,[ebx+40h] lea ecx,[esi+50h] push edx lea edx,[ebx+50h] push edx call eax test al,al je node::Check+7Fh
push ebp
mov ebp,esp
這將保存調用者的堆棧幀指針 ( push ebp
) 並設置您的堆棧幀指針 ( mov ebp,esp
)。
push ebx
這將ebx
保存在堆棧上。 稍后,在返回之前的某個地方,您將看到一個pop ebx
。
mov ebx,dword ptr [_data1]
這會將位置_data1
的內容移動到ebx
寄存器中。 調試器會顯示一個符號名稱; 如果你仔細觀察,你會看到move ebx,dword ptr [ebp+12]
。 這里調用者的參數是使用ebp
的堆棧幀指針訪問的。
push esi
mov esi,ecx
這會保存esi
,然后將ecx
的值移動到esi
。
mov eax,dword ptr [esi+50h]
這會將esi+50h
處的內存位置的值移動到eax
。
有時您不必太擔心編譯器生成的匯編程序。 它可能不是最佳的,或者可能優化得你無法識別你的原始陳述。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.