Dies ist C++ mit x86-Inline-Assembly [Intel Syntax]Anruf nicht zurückkehr richtig [X86_ASM]
Funktion:
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
}
}
Der Zweck dieser Funktion ist es, mehrere Funktionen/Adressen aufrufen, ohne sie einzeln aufrufen .
Warum habe ich Sie debuggen? Ich muss die Schule für den Tag beginnen, und ich muss es bis zum Abend geschafft haben. alot
Danke, iDomo
Welcher Compiler? Visual C++? Außerdem verstehe ich nicht, was du wissen willst. –
Sind Sie sicher, dass das Problem nicht mit der aufgerufenen Funktion verbunden ist? Tritt das Problem beim ersten Anruf oder danach auf? –
Ihre Push/Pop-Paare sind durcheinander ('eax' und' esi'). Es wäre wahrscheinlich schneller zu benutzen 'mov esi, edx; shl esi, 2' statt 'mov esi, 4; imul esi, edx'. Haben Sie die gesamte Funktion demontiert und überprüft? Wie Scott sagte, haben die aufgerufenen Funktionen wirklich die Signatur, die Sie erwarten? – DCoder