Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
TexHuK
9 / 9 / 0
Регистрация: 19.10.2011
Сообщений: 102
1

Вызов функции которая находится в регистре EAX

18.11.2014, 15:08. Просмотров 663. Ответов 11
Метки нет (Все метки)

Приветствую!
Пытаюсь переписать некоторый код, с одного асма на другой) я в этом не силен, прошу не обессудьте.

как вызвать функцию, адрес которой прописан в eax, а точнее в eax находится не адрес самой функции, а адрес названия функции.

так вот, как мне эту функцию вызвать?

пытался

Assembler
1
2
3
4
call eax
---
mov namefunc, eax
call namefunc
ни чего, не получается
как еще можно?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2014, 15:08
Ответы с готовыми решениями:

Инструкции mov ss:[esp], eax и push eax - одно и тоже?
Всем привет. У меня вопрос: инструкции mov ss:, eax и push eax - одно и тоже?

Что такое test eax, eax и каково их назначение
что делает test eax,eax?

какое значение будет находится в регистре AX после выполнения программы?
какое значение будет находится в регистре AX после выполнения программы: model small stack 100h...

Записать в регистр bx старшую половину регистра eax с одновременным ее обнулением в регистре eax
Необходимо создать программу на ассемблере (любом) перезаписывающую в регистр bx старшую половину...

Что в регистре EAX?
MOV EAX,23445678h XOR EAX,98755433h ;что в eax?

11
Mikl___
Автор FAQ
13506 / 6435 / 638
Регистрация: 11.11.2010
Сообщений: 11,631
18.11.2014, 16:36 2
Цитата Сообщение от TexHuK Посмотреть сообщение
Пытаюсь переписать некоторый код, с одного асма на другой
Можно было и написать с какого диалекта на какой - здесь очень плохие экстрасенсы
0
TexHuK
9 / 9 / 0
Регистрация: 19.10.2011
Сообщений: 102
18.11.2014, 16:57  [ТС] 3
я думал это не принципиально,
но если принципиально то с fasm на masm

может быть я неверно сформулировал вопрос?

у меня в отладчике написанно

Assembler
1
EAX 00403024 ASCII "Sleep"
т.е. по сути это говорит, что по адресу 00403024 есть слово Sleep,
так вот, как мне это слово выдать за функцию? Т. е. вызвать?
Естественно в стеке уже забиты миллисекунды, осталось только вызвать функцию.
0
Charles Kludge
Клюг
7648 / 3163 / 383
Регистрация: 03.05.2011
Сообщений: 8,381
18.11.2014, 19:39 4
GetModuleHandle(); + GetProcAddress();
1
18.11.2014, 19:39
TexHuK
9 / 9 / 0
Регистрация: 19.10.2011
Сообщений: 102
19.11.2014, 08:28  [ТС] 5
спасибо за подсказку, буду разбираться)

Добавлено через 20 минут
т.е. в первом случае я делаю так

Assembler
1
2
3
4
5
HINST dd 0
.....
push eax
call GetModuleHandleA@4
mov HINST, eax
я в верном направлении?
Просто че-то не доходит, ведь GetModuleHandleA возвращает дескриптор приложения, а тут получается он возвращает дескриптор функции чтоли?

Добавлено через 9 часов 15 минут
нет, так не работает, eax возвращает 0
у меня есть пример только получения дескриптора приложения, пример с функцией нет к сожалению, может подскажите что я делаю не так?

нашел пример на fasm, тут используется что-то вроде invoke

funcname как раз и содержит имя апи-функции
как его переписать на masm?

Assembler
1
noimport_invoke_load funcname, chr$("shell32.dll"), 0, chr$("open"), chr$("helloworld.exe"), 0, 0, SW_SHOWNORMAL
0
Mikl___
Автор FAQ
13506 / 6435 / 638
Регистрация: 11.11.2010
Сообщений: 11,631
19.11.2014, 08:42 6
TexHuK,
функция, которую ты пытаешься вызвать находится в какой-то dll, пусть функция называется funk_name, a dll - dll_name
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
.data
dll_name db "abc.dll",0
funk_name db "defgh",0
.code
...
invoke LoadLibrary,offset dll_name
cmp eax,0
jz error1
invoke GetProcAddress,eax,offset funk_name
cmp eax,0
jz error2
call eax; call defgh
1
TexHuK
9 / 9 / 0
Регистрация: 19.10.2011
Сообщений: 102
19.11.2014, 09:15  [ТС] 7
спасибо я уже почти додумался сам, только без invoke и почти догадался что надо вызывать eax)

Assembler
1
2
3
4
5
6
7
8
9
    push eax ;название функции
    
    push offset filelib
    call LoadLibraryA@4
    
    push eax
    call GetProcAddress@8
 
    call eax
0
Mikl___
Автор FAQ
13506 / 6435 / 638
Регистрация: 11.11.2010
Сообщений: 11,631
19.11.2014, 09:33 8
TexHuK,
invoke это такой макрос, который скрывает под собой call и кучу push`ей
Assembler
1
2
3
4
5
6
7
8
9
 
    push  offset filelib
    call    LoadLibraryA@4
    не забывай проверять ЕАХ на ноль
    push offset название функции
    push  eax
    call    GetProcAddress@8
    опять не забудь проверить ЕАХ на ноль
    call    eax
а для чего используется такой странный способ вызова функции? почему нельзя функцию включить в секцию импорта? для чего нужен этот онанизм с регистром ЕАХ?
1
TexHuK
9 / 9 / 0
Регистрация: 19.10.2011
Сообщений: 102
19.11.2014, 09:51  [ТС] 9
ну это еще раз демонстрирует мощь ассемблера) а во-вторых больше в целях обучения.. Хочу собрать программку, которая будет как бы распаковываться и выполняться, если такое конечно возможно)
0
Mikl___
Автор FAQ
13506 / 6435 / 638
Регистрация: 11.11.2010
Сообщений: 11,631
19.11.2014, 10:22 10
TexHuK,
а каким образом в твоей программе окажутся адреса LoadLibrary и GetProcAddress?
0
TexHuK
9 / 9 / 0
Регистрация: 19.10.2011
Сообщений: 102
19.11.2014, 10:28  [ТС] 11
Mikl___, я об этом еще не думал..
Но если подумать, то получается без этих функций реализация остальных функций не возможно?
0
Mikl___
Автор FAQ
13506 / 6435 / 638
Регистрация: 11.11.2010
Сообщений: 11,631
20.11.2014, 04:37 12
TexHuK,
если подумать, то возможно всё, ищи решения в сети...
0
20.11.2014, 04:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2014, 04:37

Найдите число, факториал которого лежит в регистре %eax
Здравствуйте! В ассамблере не шарю,но нужно выполнить такую задачку: Ограничение по времени...

Что должно находится в eax после этих команд?
Одинаковые сдвиги влево и потом вправо не должны изменить регистр eax. mov eax, 0000BBBBh shl...

Узнать, что находится в регистре
В регистре Al находится что то. Установить флаг CF, если это код цифры. Пожалуйста помогите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru