purebasic.info

PureBasic forum
Текущее время: Ср сен 19, 2018 2:18 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: Подмена импорта
СообщениеДобавлено: Сб авг 27, 2016 1:22 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
Какими способами можно подменить определенный адрес в импорте на свой, на этапе компиляции?
Чтобы было понятней:
Код:
1
2
3
4
5
6
7
 
;сейчас так:
;на входе имеем
MessageRequester()
;на выходе
CALL   <JMP.&;USER32.MessageBoxA>
 


Так вот надо каким-то образом заменить вызов MessageBoxA на вызов своей функции.
Думал макросами фасма организовать, но пока что не сообразил, как детектить нужный вызов.

В общем, любые идеи.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Подмена импорта
СообщениеДобавлено: Сб авг 27, 2016 7:07 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 571
Благодарил (а): 2 раз.
Поблагодарили: 32 раз.
Пункты репутации: 9
А зачем подменять то,может просто адрес своей использовать до компиляции? :roll:


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Подмена импорта
СообщениеДобавлено: Сб авг 27, 2016 8:03 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
Сергейчик, можно, но хотелось бы универсальней сделать.
Хотя еще есть вариант подменять после того, как пурик с конвертирует исходник в фасм листинг.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Подмена импорта
СообщениеДобавлено: Сб авг 27, 2016 8:23 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 571
Благодарил (а): 2 раз.
Поблагодарили: 32 раз.
Пункты репутации: 9
Универсальность то в чём,понимаю когда компилятор компилит функцию под разные архитектуры(win,linux)а тут то вопрос в чём?(он звучит же в подмене экспортируемой функции на свою, причём перед началом компиляции задаётся компилятору некое правило,то есть по сути эта экспортируемая функция не задействована в программе,а будет тупо своя некая процедура) :roll:


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Подмена импорта
СообщениеДобавлено: Сб авг 27, 2016 9:44 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
Сергейчик писал(а):
Универсальность то в чём

Так я же выше пример привел. Поясню, есть большой код(даже не один), где много, например, MessageRequester и MessageBox_, и надо заменить их на свою процедуру или на процедуру из внешней длл, и чтобы не перелопачивать весь код логичнее сделать подмену вызова MessageBoxA. В итоге сорец остается неизменный, а на выходе получается другой результат.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Подмена импорта
СообщениеДобавлено: Вс авг 28, 2016 12:08 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
Тогда не проще использовать макрос?
Код:
1
2
3
4
5
Macro MessageRequester(x, y)
  Debug "Перехват MessageRequester"
EndMacro
 
MessageRequester("Заголовок" , "Текст")


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Подмена импорта
СообщениеДобавлено: Вс авг 28, 2016 11:41 am 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
Пётр писал(а):
Тогда не проще использовать макрос?
Код:
1
2
3
4
5
Macro MessageRequester(x, y)
  Debug "Перехват MessageRequester"
EndMacro
 
MessageRequester("Заголовок" , "Текст")



Точно! Про макросы пурика я забыл :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Подмена импорта
СообщениеДобавлено: Вс авг 28, 2016 2:30 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
А как теперь в параметре макроса вызвать функцию? Например MessageRequester(Str(1), ""), а макрос
Код:
1
2
3
 Macro MessageRequester(x, y)
 CallFunctionFast(My_MessageBox, 0, y, x, 0)
EndMacro


Где My_MessageBox адрес из внешней dll.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Подмена импорта
СообщениеДобавлено: Вс авг 28, 2016 3:16 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн июл 04, 2011 7:38 am
Сообщений: 749
Откуда: Россия
Благодарил (а): 29 раз.
Поблагодарили: 9 раз.
Пункты репутации: 0
Код:
1
2
3
4
5
6
7
8
9
10
11
12
 
Macro MessageRequester(x, y)
 CallFunctionFast(@My_MessageBox(), 0, @y, @x, 0)
EndMacro
 
Procedure My_MessageBox(a, b.s, c.s, d)
  Debug b
  Debug c
EndProcedure
 
MessageRequester("Title", "Text")
 


_________________
medium.com/@afonichev.dev


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Подмена импорта
СообщениеДобавлено: Вс авг 28, 2016 3:49 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
SergeyA, ты не понял. Попробуй вот так MessageRequester(Str(1), "") свой пример вызвать.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Подмена импорта
СообщениеДобавлено: Вс авг 28, 2016 4:08 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
Пиши тогда так.
Код:
1
2
3
4
5
6
7
8
9
10
Procedure My_MessageBox(a, b.s, c.s, d)
  Debug b
  Debug c
EndProcedure
 
Macro MessageRequester(x, y)
 My_MessageBox(0, y, x, 0)
EndMacro
 
MessageRequester(Str(1), "")


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Подмена импорта
СообщениеДобавлено: Вс авг 28, 2016 7:16 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
Пётр писал(а):
Пиши тогда так.

Так пробовал. Как вариант пойдет, только писанины больше.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Подмена импорта
СообщениеДобавлено: Вс авг 28, 2016 8:26 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
Почему больше?

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Подмена импорта
СообщениеДобавлено: Вс авг 28, 2016 8:50 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
Процедура-то не одна подменяется. MessageRequester только как пример. А тут надо к каждому макросу еще обертку делать.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB