이것은 C++ 86 인라인 어셈블리를 사용하여 [인텔 문법]전화는 반환하지 제대로 [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++? 또한, 나는 당신이 알고 싶은 것을 이해하지 못합니다. –
함수를 호출 할 때 문제가 발생하지 않았습니까? 문제가 첫 번째 전화 또는 그 이후에 발생합니까? –
푸시/팝 쌍이 섞여 있습니다 ('eax'와'esi'). 아마도'mov esi, edx;를 사용하는 것이 더 빠를 것입니다. shl esi, 2'mov esi, 4 대신에; imul esi, edx'. 전체 기능을 분해하고 검토 했습니까? Scott이 말했듯이, 호출 된 함수는 실제로 여러분이 기대하는 서명을 가지고 있습니까? – DCoder