Servus,
aus irgendeinem Grund steht in meinem ESI-Register nicht die Startadresse des Programms; das Programm stürzt bei folgendem Code ab:
Spoiler anzeigen
$FasmObj = FasmInit()
FasmReset($FasmObj)
FasmAdd($FasmObj, "use32")
FasmAdd($FasmObj, "mov eax, dword[esi+var1]")
FasmAdd($FasmObj, "ret")
FasmAdd($FasmObj, "var1 db 16")
$Bytecode=FasmGetBinary($FasmObj)
$tCodebuffer=DllStructCreate("byte["&stringlen($Bytecode)/2-1&"]")
DllStructSetData($tCodeBuffer,1,$Bytecode)
$Ret= DllCall("user32.dll", "int", "CallWindowProcW", "ptr", DllStructGetPtr($tCodeBuffer, ""), "int", 1, "int", 1, "int", 0, "int", 0)
_ArrayDisplay($Ret)
Übergeb ich den Basepointer manuell über ein Parameter, dann klappts natürlich:
Spoiler anzeigen
#include <FASM.au3>
#include <Array.au3>
$FasmObj = FasmInit()
FasmReset($FasmObj)
FasmAdd($FasmObj, "use32")
FasmAdd($FasmObj, "mov eax, dword[esp+4]")
FasmAdd($FasmObj, "mov eax, dword[eax+var1]")
FasmAdd($FasmObj, "ret")
FasmAdd($FasmObj, "var1 db 16")
$esi = FasmGetBasePtr($FasmObj)
$Bytecode=FasmGetBinary($FasmObj)
$tCodebuffer=DllStructCreate("byte[" & StringLen($Bytecode)/2-1&"]")
DllStructSetData($tCodeBuffer,1,$Bytecode)
$Ret= DllCall("user32.dll", "int", "CallWindowProcW", "ptr", DllStructGetPtr($tCodeBuffer, ""), "int", $esi, "int", 1, "int", 0, "int", 0)
_ArrayDisplay($Ret)
Ich würd eben gerne nur mit dem Bytecode dann arbeiten, deshalb kommt dann der Befehl FasmGetBasePtr() nicht mehr in Frage...
Ich frag mich natürlich was mit meinem ESI-Register los ist, und wenns nicht anders geht, wie ich an den Basepointer ran komm.
Ich hoff ich konnte mich verständlich ausdrücken:)