這是C++使用x86的內聯組件[Intel語法]呼叫沒有返回正確[X86_ASM]
功能:
DWORD *Call (size_t lArgs, ...){
DWORD *_ret = new DWORD[lArgs];
__asm {
xor edx, edx
xor esi, esi
xor edi, edi
inc edx
start:
cmp edx, lArgs
je end
push eax
push edx
push esi
mov esi, 0x04
imul esi, edx
mov ecx, esi
add ecx, _ret
push ecx
call dword ptr[ebp+esi] //Doesn't return to the next instruction, returns to the caller of the parent function.
pop ecx
mov [ecx], eax
pop eax
pop edx
pop esi
inc edx
jmp start
end:
mov eax, _ret
ret
}
}
此功能的目的是調用多個功能/地址,而不單獨地調用它們。
爲什麼我要讓你調試它? 我必須開始上課,我需要在晚上完成。
非常感謝,iDomo
哪個編譯器? Visual C++?另外,我不明白你想知道什麼。 – 2012-04-13 12:39:55
你確定問題不在於被調用的函數嗎?第一個電話會發生問題,還是之後呢? – 2012-04-13 12:46:43
您的推/拉對混合在一起('eax'和'esi')。使用'mov esi,edx可能會更快; shl esi,2'而不是'mov esi,4; imul esi,edx'。你有沒有反彙編和審查整個功能?像Scott說的那樣,被調用的函數真的有你期望的簽名嗎? – DCoder 2012-04-13 13:00:07