Jemand von hier fragte mich das per ICQ.
Dort ging es auch um Halo 2 und die Base.
Hatte ihm diesen Code geschickt.
[code=asm]TL_GetBase proc uses ecx edx ebx edi dwProcessIdWORD,lpszFileWORD,iBaseSizeWORD
local me32:MODULEENTRY32
xor ebx,ebx
invoke RtlZeroMemory,addr me32,sizeof MODULEENTRY32
mov edi,lpszFile
.if (edi)
invoke CreateToolhelp32Snapshot,TH32CS_SNAPMODULE,dwProcessId
.if (eax!=INVALID_HANDLE_VALUE)
push eax
mov me32.dwSize,sizeof me32
invoke Module32First,[esp+4],addr me32
.while (eax)
invoke lstrcmpi,addr me32.szModule,edi
jz @mod_check
invoke Module32Next,[esp+4],addr me32
.endw
call CloseHandle
jmp @mod_end
@mod_check:
call CloseHandle
mov eax,iBaseSize
test eax,eax
jz @mod_ok
cmp me32.modBaseSize,eax
je @mod_ok
dec ebx
jmp @mod_end
@mod_ok:
mov ebx,me32.modBaseAddr
.endif
.endif
@mod_end:
mov eax,ebx
ret
TL_GetBase endp[/code]
iBaseSize: 0=Kein Test. BaseSize=Testen. (Ist der Rückgabewert -1. Dann handelt es sich um eine falsche Version.)
lpszFile: Name der Exe/Dll(Ohne Pfad!). (Ist der Rückgabewert 0. Base konnte nicht ermittelt werden.)
dwProcessId: Die ProcessID.
invoke TL_GetBase,pid,addr szGameExe,148000h
oder
invoke TL_GetBase,pid,addr szGameExe,NULL ; BaseSize egal.
Vllt kann es noch jemand gebrauchen.
MfG
Dort ging es auch um Halo 2 und die Base.
Hatte ihm diesen Code geschickt.
[code=asm]TL_GetBase proc uses ecx edx ebx edi dwProcessIdWORD,lpszFileWORD,iBaseSizeWORD
local me32:MODULEENTRY32
xor ebx,ebx
invoke RtlZeroMemory,addr me32,sizeof MODULEENTRY32
mov edi,lpszFile
.if (edi)
invoke CreateToolhelp32Snapshot,TH32CS_SNAPMODULE,dwProcessId
.if (eax!=INVALID_HANDLE_VALUE)
push eax
mov me32.dwSize,sizeof me32
invoke Module32First,[esp+4],addr me32
.while (eax)
invoke lstrcmpi,addr me32.szModule,edi
jz @mod_check
invoke Module32Next,[esp+4],addr me32
.endw
call CloseHandle
jmp @mod_end
@mod_check:
call CloseHandle
mov eax,iBaseSize
test eax,eax
jz @mod_ok
cmp me32.modBaseSize,eax
je @mod_ok
dec ebx
jmp @mod_end
@mod_ok:
mov ebx,me32.modBaseAddr
.endif
.endif
@mod_end:
mov eax,ebx
ret
TL_GetBase endp[/code]
iBaseSize: 0=Kein Test. BaseSize=Testen. (Ist der Rückgabewert -1. Dann handelt es sich um eine falsche Version.)
lpszFile: Name der Exe/Dll(Ohne Pfad!). (Ist der Rückgabewert 0. Base konnte nicht ermittelt werden.)
dwProcessId: Die ProcessID.
invoke TL_GetBase,pid,addr szGameExe,148000h
oder
invoke TL_GetBase,pid,addr szGameExe,NULL ; BaseSize egal.
Vllt kann es noch jemand gebrauchen.
MfG