
20.01.2010, 22:34
|
|
Новичок
Регистрация: 16.12.2009
Сообщений: 14
Провел на форуме: 20162
Репутация:
0
|
|
Получение базы kernel32.dll [Asm]
Вот решил провести эксперимент и написал (не без помощи сайтов) прогу (masm32), которая определяет адрес базы kernel32.dll:
Код:
.386
option casemap:none
.model flat, stdcall
;----------------------------include---------------------
includelib \masm32\lib\kernel32.lib
include \masm32\include\kernel32.inc
;--------------------------------------------------------
.data
db 0
.code
start:
mov esi, [esp]
call GetBase; после вызова в eax база kernel32.dll
invoke ExitProcess, 0
;#####################################GetBase###############################
;
; Получение базы kernel32.dll
;
;###########################################################################
GetBase:
push esi;сохраняем все регистры, которые используются
push ecx
pushf;сохраняем регистр флагов
and esi,0FFFF0000H;гранулярность выделения памяти
mov ecx,6;счетчик страниц
_@1: ;проверка очередной страницы
cmp word ptr [esi], "ZM"
jz WeGotBase
_@2:
sub esi, 10000h
loop _@1
WeFailed:
mov eax, 00000000h ;база не найдена
jmp EndGetBase
WeGotBase:
xchg eax, esi
EndGetBase:
popf;восстанавливаем значения флагов
pop ecx
pop esi;восстанавливаем значения регистров
ret
;#########################################################################
;Конец процедуры GetBase
;#########################################################################
end start
В Windows XP SP3 я получил адрес базы 7C800000h в Windows 7 77140000h
|
|
|