Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Assembler


Страницы:   1 2

niko ©   (2006-12-19 17:50:00) 

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


oxffff   (2006-12-20 08:54:00) [1]


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


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


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


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


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


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


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


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


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


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

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


Anatoly Podgoretsky   (2006-12-19 19:51:00) [4]

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

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


niko   (2006-12-19 19:01:00) [5]

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


DrPass   (2006-12-19 18:55:00) [6]


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

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


niko   (2006-12-19 18:49:00) [7]

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


Eraser   (2006-12-19 18:47:00) [8]

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

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


niko   (2006-12-19 18:44:00) [9]


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


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

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


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

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


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

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

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


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

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


DrPass   (2006-12-19 18:27:00) [13]


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

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


Джо   (2006-12-19 18:20:00) [14]

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

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


Eraser   (2006-12-19 18:20:00) [15]

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


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

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

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

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

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


niko   (2006-12-19 18:18:00) [16]

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

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


Eraser   (2006-12-19 18:14:00) [17]

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

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

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

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


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

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

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


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

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

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


niko   (2006-12-19 18:07:00) [20]

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо