Сейчас на форуме: Rio, YDS (+10 невидимых)

 eXeL@B —› Основной форум —› GetModuleHandleA(0)=3 постоянных инструкции?
Посл.ответ Сообщение

Ранг: 62.8 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 09 апреля 2006 19:32
· Личное сообщение · #1

Под WindowsXP Sp2 GetModuleHandleA(0) фактически сводится к следующим командам:
mov eax,dword [fs:18h]
mov eax,dword [ds:eax+30h]
movzx eax,byte [ds:eax+8h]
На всех ли версиях Win так?



Ранг: 64.6 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 10 апреля 2006 12:07
· Личное сообщение · #2

Под WinXP Sp1 GetModuleHandleA(0)
mov eax, large fs:18h
mov eax, [eax+30h]
mov eax, [eax+8]



Ранг: 25.3 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 10 апреля 2006 12:17 · Поправил: flamer
· Личное сообщение · #3

SP2

7C80B555 8B40 08 mov EAX,DWORD PTR DS:[EAX+8]



Ранг: 25.3 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 10 апреля 2006 23:31
· Личное сообщение · #4

Кстати, я ошибаюсь, или возвращаемое значение практически всегда равно
0040 0000h ?



Ранг: 50.7 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 10 апреля 2006 23:57
· Личное сообщение · #5

flamer пишет:
возвращаемое значение практически всегда равно
0040 0000h ?

Возвращаемое число вроде равно Image Base. Т.е. зачастую именно 400000h



Ранг: 62.8 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 11 апреля 2006 14:18
· Личное сообщение · #6

Ничего себе. Кстати, movzx eax, byte [ds:eax+8h] по-моему, даст такой же эффект как mov eax, [eax+8h], если вначале идут нули. Вариант, приведённый flamer, и step совпадает (разный синтаксис). Хотя может ошибаюсь.
Klajnor
Ты прав. Поэтому если точно знаешь Image Base, можно её не вызывать. Просто на неё нередко ставят брейкпоинты, чтобы снять дамп. Все ЯВУ зачем-то вызывают эту функцию.
Кстати, а GetCurrentThread и GetCurrentProcess всегда равны -1, надеюсь Вы об этом знаете.



Ранг: 53.8 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 11 апреля 2006 15:23
· Личное сообщение · #7

NullSession пишет:
GetCurrentThread и GetCurrentProcess всегда равны -1, надеюсь Вы об этом знаете.

вообще-то вот код GetCurrentThread из xp sp2:

PUSH -2
POP EAX
RETN





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 11 апреля 2006 15:42
· Личное сообщение · #8

NullSession пишет:
Все ЯВУ зачем-то вызывают эту функцию.


hInstence = ImageBase in NT

-----
Yann Tiersen best and do not fuck





Ранг: 199.6 (ветеран), 12thx
Активность: 0.10
Статус: Участник
www.uinc.ru

Создано: 11 апреля 2006 15:56
· Личное сообщение · #9

> Все ЯВУ зачем-то вызывают эту функцию

Потому что невсегда(!) hInstence = ImageBase in NT



Ранг: 50.7 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 12 апреля 2006 00:34
· Личное сообщение · #10

DrGolova пишет:
невсегда(!) hInstence = ImageBase

Очень интересно, когда-же hInstance<>ImageBase ...




Ранг: 199.6 (ветеран), 12thx
Активность: 0.10
Статус: Участник
www.uinc.ru

Создано: 12 апреля 2006 01:23
· Личное сообщение · #11

Например в этом случае.
Превед афторам пакеров, которые всегда вытирают релоки из exe, и тем кто считает что в exe можно неиспользовать базонезависимый код

a9a3_12.04.2006_CRACKLAB.rU.tgz




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 12 апреля 2006 11:02
· Личное сообщение · #12

DrGolova, что то я не понял. Выш exe грузится по адресу 10000. GetModuleHandleA возвращает тоже 10000. Так почему же hInstence <> ImageBase? Как раз наоборот, и ваш exe это доказывает. Может мы по разному исталковываем понятие hInstence?

-----
Yann Tiersen best and do not fuck





Ранг: 199.6 (ветеран), 12thx
Активность: 0.10
Статус: Участник
www.uinc.ru

Создано: 12 апреля 2006 13:32
· Личное сообщение · #13

Видимо мы по разному истолковываем понятие ImageBase.
Для меня это поле в РЕ заголовке, в данном случае там 0x7fff0000
А hInstance для меня - реальный адрес загрузки модуля, т.е. 0x10000




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 12 апреля 2006 13:36
· Личное сообщение · #14

Ааа, ну да тогда понятно. Я читал в MSDN (вроде), что hInstance равен реальному адресу загрузки модуля (для меня ImageBase) на NT платформе. Отсюда и вопрос, а если он не будет равен ImageBase, то что он будет обозначать?

-----
Yann Tiersen best and do not fuck




Ранг: 352.4 (мудрец), 4thx
Активность: 0.150
Статус: Участник
retired

Создано: 12 апреля 2006 13:45
· Личное сообщение · #15

если он не равен imagebase из заголовка он и будет означать реальный адрес загрузки. как раз для этого и пригодятся релоки в .exe




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 12 апреля 2006 13:52
· Личное сообщение · #16

Да нет, я не про то. Из чтива мелкомягких выходит что на не NT платформе hInstance может не равнятся ImageBase из заголовка и даже не равнятся RealImageBase (реальному адресу загрузки модуля).

Так вот тогда что он будет означать?

-----
Yann Tiersen best and do not fuck




Ранг: 41.9 (посетитель)
Активность: 0.020
Статус: Участник
Author of EXECryptor

Создано: 12 апреля 2006 15:24
· Личное сообщение · #17

DrGolova пишет:
Превед афторам пакеров


ты забыл еще передать "превед" (орфография сохранена ) мелкософту, и другим вендорам компиляторов которые генерируют exe без релоков а некоторые так вообще не позволяют их (тобишь релоки) создать в exe ни под каким соусом и ни с какими опциями.

PE_Kill пишет:
Так вот тогда что он будет означать


все что угодно. не с той стороны движешся имхо. на нт hInst совпадает с адресом загрузки. imagebase в этом случае всеголишь предпочтительный адрес загрузки. если он занят и нет релоков - тогда ку-ку. об этом и пытался сказать кросавчг в несколько завуалированной форме
но если у нас imagebase в хидере вменяемый, тогда нам релоки не нужны. поэтому мы их резали, режем и будем резать )



Ранг: 352.4 (мудрец), 4thx
Активность: 0.150
Статус: Участник
retired

Создано: 12 апреля 2006 15:43
· Личное сообщение · #18

разве msvc по дефолту релоки не вставляют? (я думал что надо насиловать его ключом /FIXED для этого)



Ранг: 41.9 (посетитель)
Активность: 0.020
Статус: Участник
Author of EXECryptor

Создано: 12 апреля 2006 15:53
· Личное сообщение · #19

msvc, vb5, vb6 по дефолту делает без релоков. а вот дельфа, билдер, всякие васики и тп - с релоками.
вообще то ничего удивительного - мелкософт документацию пишет не для себя а для других. а сами они на эту доку частенько забивают по полной программе. а мы потом ломаем голову - что с лыжами



Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 12 апреля 2006 15:56
· Личное сообщение · #20

ssx пишет:
разве msvc по дефолту релоки не вставляют?


только если ImageBase стандартная 0x400000



Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 12 апреля 2006 15:58
· Личное сообщение · #21

Relayer пишет:
а вот дельфа, билдер, всякие васики и тп - с релоками.


а мы потом ломаем голову как избавится от этого "мусора" штатными средствами линкера




Ранг: 199.6 (ветеран), 12thx
Активность: 0.10
Статус: Участник
www.uinc.ru

Создано: 12 апреля 2006 17:06
· Личное сообщение · #22

Говоришь линкеру /FIXED:NO и msvc оставляет релоки, можно натравливать профайлер и учиться грамотно писать быстрый код



Ранг: 62.8 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 28 апреля 2006 21:55
· Личное сообщение · #23

bkslash
Да точно, GetCurrentThread=2.
А ни хрена себе вы тут инфы выдали, и не думал никогда.


 eXeL@B —› Основной форум —› GetModuleHandleA(0)=3 постоянных инструкции?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати