Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.07;
Скачать: CL | DM;

Вниз

Assembler   Найти похожие ветки 

 
niko ©   (2006-12-19 17:50) [0]

Известен адрес функции в другой dll. Как перейти на неё (не call) и передать ей в качестве параметра какую нибудь переменную, ну к примеру DWORD


 
Джо ©   (2006-12-19 18:04) [1]

Что значит «перейти (не call)»?


 
niko ©   (2006-12-19 18:07) [2]

call - вызывает ф-ю, по её окончанию возвращается.
мне возвращапься не надо


 
Джо ©   (2006-12-19 18:08) [3]

> [2] niko ©   (19.12.06 18:07)
> call - вызывает ф-ю, по её окончанию возвращается.
> мне возвращапься не надо

CALL никуда не «возвращается», к сведению.


 
niko ©   (2006-12-19 18:11) [4]

она запихивает в стек адрес возврата - а мне отого делать не надо.

да и дело то не в том, как правельно передоть параметры - Cardinal


 
Eraser ©   (2006-12-19 18:14) [5]

> [4] niko ©   (19.12.06 18:11)

а jmp чем не подходит? )

> как правельно передоть параметры - Cardinal

все зависит от соглашения о вызовах, принятом в программе.


 
niko ©   (2006-12-19 18:18) [6]

ну я впринцепе и перехажу по JMP"у.

А вот про соглашения если можно по подробнее. Как бы ты сделал у себя на своей машине? Глядишь я и соображу.


 
Eraser ©   (2006-12-19 18:20) [7]

> [6] niko ©   (19.12.06 18:18)


> Как бы ты сделал у себя на своей машине?

а при чем здесь машина? :)

> А вот про соглашения если можно по подробнее.

см. в гугле/справке по ключевым словам: stdcall, register, cdecl

+ http://en.wikipedia.org/wiki/X86_calling_conventions


 
Джо ©   (2006-12-19 18:20) [8]

> [6] niko ©   (19.12.06 18:18)
> ну я впринцепе и перехажу по JMP"у.
>
> А вот про соглашения если можно по подробнее. Как бы ты
> сделал у себя на своей машине? Глядишь я и соображу

Параметры могут передавать разными способами. Могут через стек (push), могут в регистрах общего назначения. Кроме того, порядок передачи параметров может быть разным.


 
DrPass ©   (2006-12-19 18:27) [9]


> она запихивает в стек адрес возврата - а мне отого делать
> не надо

Замечательная идея. А когда вызываемая процедура дойдет до ret, она сразу перелетит на один уровень вызова вверх (или вообще в никуда). А так как на стеке окажется черт знает что, программа просто развалится.


 
niko ©   (2006-12-19 18:31) [10]

у меня там окажется то что надо - не надо меня совсем уж за дурака держать


 
Eraser ©   (2006-12-19 18:34) [11]

> [10] niko ©   (19.12.06 18:31)

так а зачем изобретать велосипеды то, когда есть инструкция call?


 
Sha ©   (2006-12-19 18:42) [12]

Перехват API: http://www.wasm.ru


 
niko ©   (2006-12-19 18:44) [13]


>  [11] Eraser ©   (19.12.06 18:34)


мне не надо что бы функция, которцю я вызываю (3), возвращалась не "сюда" (2), она должна вернуться в ту (1) которая вызвала данную (2).

вот тока не знаю поймёшь чё я имею в види.


 
Eraser ©   (2006-12-19 18:47) [14]

> [13] niko ©   (19.12.06 18:44)

а! Sha наверное угадал! перехват API ? ) так тогда ты не в ту сторону капаешь )


 
niko ©   (2006-12-19 18:49) [15]

Ну чтож, попробую покапать в ту сторону.
Спасибо!


 
DrPass ©   (2006-12-19 18:55) [16]


> у меня там окажется то что надо - не надо меня совсем уж
> за дурака держать

За дурака тебя никто не держит. Непонятно только, зачем этот изврат. Что мешает, например, из (3) вернуться в (2), а там сделать человеческий ret в (1) без игрушек со стеком.


 
niko ©   (2006-12-19 19:01) [17]

Если бы ни чего не мешало, наверное я бы не стал так изврашаться - садо-маза не люблю. Но в данном случае по другому ни как, объяснять что к чему смысла я думаю нет.


 
Anatoly Podgoretsky ©   (2006-12-19 19:51) [18]

> niko  (19.12.2006 19:01:17)  [17]

Хотел посоветовать, но теперь желания нет.
Да и рано тебе ассемблером заниматься, если основ не знаешь.


 
GrayFace ©   (2006-12-19 20:29) [19]

Anatoly Podgoretsky ©   (19.12.06 19:51) [18]
Да и рано тебе ассемблером заниматься, если основ не знаешь.
Да нет. Вот только основы, типа нажатия Ctrl+Shift+C надо знать.


 
Сергей М. ©   (2006-12-20 08:24) [20]


> Известен адрес функции в другой dll


Кроме этого должны быть еще известны параметры ф-ции и соглашения о ее вызове.


> Как перейти на неё (не call)


Куча способов, начиная с jmp и push+ret


 
oxffff ©   (2006-12-20 08:54) [21]


> niko ©   (19.12.06 17:50)  
> Известен адрес функции в другой dll. Как перейти на неё
> (не call) и передать ей в качестве параметра какую нибудь
> переменную, ну к примеру DWORD


> у меня там окажется то что надо - не надо меня совсем уж
> за дурака держать


> niko ©   (19.12.06 19:01) [17]
> Если бы ни чего не мешало, наверное я бы не стал так изврашаться
> - садо-маза не люблю. Но в данном случае по другому ни как,
>  объяснять что к чему смысла я думаю нет.


Ты сначала подумай, что ты вообще хочешь.



Страницы: 1 вся ветка

Текущий архив: 2007.01.07;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.038 c
2-1166196967
DmitrichJ
2006-12-15 18:36
2007.01.07
Как измерить время выполнения операторов.


2-1166596492
YuMB
2006-12-20 09:34
2007.01.07
Как отловить нажатие клавишь Ctrl + S ?


2-1166200832
Просто Коля
2006-12-15 19:40
2007.01.07
Изменение рпзмеров Контроллов


15-1166364444
Ricko
2006-12-17 17:07
2007.01.07
Апокалипсис


2-1166570104
Святослав
2006-12-20 02:15
2007.01.07
Базы данных и Delphi 2006