Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Результаты опроса: как вы ловите API функции?
не ловлю 2 50.00%
dll'кой 1 25.00%
руками 1 25.00%
прямой записью 0 0%
Голосовавшие: 4. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2010, 20:32   #1
ассемблер123
Пользователь
 
Регистрация: 18.04.2010
Сообщений: 24
Счастье расшифровать начальный код API

затираю начальный код функции glColor4f push-ret'ом на функцию my_proc

my_proc:
1. выполняет мой код
2. восстанавливает начальный код glColor4f
3. вызывает glColor4f с её родными параметрами
4. затирает начальный код glColor4f push-ret'ом на функцию my_proc

таким образом каждый вызов glColor4f будет сопровождаться выполнением моего (полезного)кода (пункт 1)

при этом всём проявляется значительная потеря производительности что неможет быть связано с п.2 и п.4 так как в них используются только mov'ы(а не ReadProcessMemory(тормоза жуткие) и т.д), регистры сохраняю и восстанавливаю в пунктах 1,2,4

я знаю что затирать нач.код апей опасно, так как могу чегото повредить,
поэтому решил расшиффровать её нач.код :


Hex 64 A1 18 00 00 00 FF A0 20 08 00 00 64 A1 18 00 00 00

помогите пожалуста:

Последний раз редактировалось ассемблер123; 28.04.2010 в 21:20. Причина: байты начиная с 7-го вначале написал неправильно
ассемблер123 вне форума Ответить с цитированием
Старый 28.04.2010, 20:40   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Дизассемблер вам в руки...
p51x на форуме Ответить с цитированием
Старый 28.04.2010, 20:44   #3
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

А дизассемблировать не пробовали?
Код:
.text:19CC197C ; void __stdcall glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
.text:19CC197C                 public glColor4f
.text:19CC197C glColor4f       proc near               ; DATA XREF: .text:off_19D5D424o
.text:19CC197C                 mov     eax, large fs:18h
.text:19CC1982                 jmp     dword ptr [eax+820h]
.text:19CC1982 glColor4f       endp
Дальше идет glColor4fv. У нее код почти такой же.

IDA Pro Freeware
"Тяжело в учении, легко в бою" - А.В. Суворов

Последний раз редактировалось Ivan_32; 28.04.2010 в 20:47.
Ivan_32 вне форума Ответить с цитированием
Старый 28.04.2010, 20:47   #4
ассемблер123
Пользователь
 
Регистрация: 18.04.2010
Сообщений: 24
По умолчанию

я нашёл

glColor4f
=========
:19CC197C 64A118000000 mov eax, dword fs:[00000018]
:19CC1982 FFA020080000 jmp dword[eax+00000820]

я так понял здесь ничего критичного не затирается?

Последний раз редактировалось ассемблер123; 28.04.2010 в 20:51.
ассемблер123 вне форума Ответить с цитированием
Старый 28.04.2010, 20:52   #5
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

Насколько я понял из гугла FS указывет на некую структуру - TEB.
Цитата:
я так понял здесь ничего критичного не затирается?
Это и есть сам вызов, насколько я понимаю. Собственно обычно ничего такого произойти не может в любому случае - главное полностью восстановить исходное состояние стека и регистов после вашей процедуры перехвата.
SomeProc:
pushad
call MySomeProc
popad
bla
bla
bla

То что стек важен, думаю и так понятно.
"Тяжело в учении, легко в бою" - А.В. Суворов

Последний раз редактировалось Ivan_32; 28.04.2010 в 20:57.
Ivan_32 вне форума Ответить с цитированием
Старый 28.04.2010, 21:02   #6
ассемблер123
Пользователь
 
Регистрация: 18.04.2010
Сообщений: 24
По умолчанию

со стеком всё правильно, а если даю повод то стэку кранты сразу(программа вылетает) и регистры pushad popad где их изменяю

короче здесь без магии не обошлось

пункт 2 и пункт 4 занимают слишком много тактов процессора поэтому и тормоза хотя и состоят из нескольких mov'ов, поэтому я зделал по другому :

записал первые 12 байт начала апи в буффер и вызываю буффер после выполнения моего (полезного)кода

теперь fps вообще не падает!!!

Последний раз редактировалось Stilet; 29.04.2010 в 11:23.
ассемблер123 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Delphi] Вычислить расположение и начальный кластер заданного каталога на диске. KrL^^ Помощь студентам 3 22.04.2010 20:12
расшифровать виженера!!! Anenya.K Помощь студентам 4 06.03.2010 13:09
Расшифровать цикл Golovastik Общие вопросы C/C++ 4 02.09.2009 23:12
Неработает код для перехвата API-функции в Vista 64bit artemvyrtosu Win Api 0 30.06.2009 18:31
Начальный уровень C++ Valento Свободное общение 3 15.03.2009 22:27