Страница: 1 | 2 |
Вопрос: [ASM] Куда под виндой запиисываются возвращаемые з
Добавлено: 14.09.08 06:05
Автор вопроса: Morpheus | Web-сайт:
Быстрый вопрос, если кто знает и время не жалко на пару слов:
Когда я из NASM под виндой вызываю, я push'кой забиваю входные параметры в стек в обратном порядке. Потом делаю call и всё пучком. Надеюсь правильно, так как пока вроде работало (вчера начал). Но так много не сделаешь...
Вопрос:
а) Куда пишутся возвращаемые значения функций типо FindWindow?
б) А что если фукция заполняет переменные, например как GetCursorPos? Достаточно сделать
[source]
resd posx
resd posy
mov eax, posy
push eax
mov eax, posx
push eax
call GetCursorPos
[/source]
?
И ещё... все ли API входят в win32.lib? если нет, как линкить несколько файлов сразу?
Ответы
Всего ответов: 19
Номер ответа: 1
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #1
Добавлено: 14.09.08 06:06
Сорри, недописал в начале.. конечно вопрос про вызов API
Номер ответа: 2
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #2
Добавлено: 14.09.08 11:18
Почти все апишки возвращают значение в EAX
Чтоб вернуть переменную, надо передать указатель на нее. В масме это push addr переменная.
Номер ответа: 3
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #3
Добавлено: 14.09.08 12:55
addr, что за словецо такое неасмовое, фу не привыкайте к нему, товарищи! любите offset & lea
Номер ответа: 4
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #4
Добавлено: 14.09.08 16:54
а нафик аддр? в NASM если не ставишь квадратные скобки то он всегда адрес передаёт
А в квадратных по значению:
mov eax, [esi+8]
двинет в eax _значение_ яйчейки памяти с адрсом esi+8... что прикольно NASM даже алгебру поддерживает внутри скобок )
Я просто не знаю как в других ассемблерах.
Почти все апишки возвращают значение в EAX
А если возвращается 2 значения? оно разбивается на старшие и младшие 16 бит?
Номер ответа: 5
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #5
Добавлено: 14.09.08 16:54
блин, смайлик с языком убойный!
Номер ответа: 6
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #6
Добавлено: 14.09.08 19:09
ну а как получить адрес того же [esi+8] ? Все правильно, lea, а как получит адресс переменной в .data(?), верно offset.
алгебра это не алгебра, это компилятор попросту вычисляет выражение в качестве константы.
если два значения, то все равно eax/rax... просто указывает он скорее всего на область памяти.
Номер ответа: 7
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #7
Добавлено: 14.09.08 19:26
лол... адрес [esi+8] = esi+8 )) я так в стек лажу, например:
А чё за ассемблер разрешает делать переменные в секции .data ? я обычно их в .bss делаю. Да, кстати, у тебя "?" в сообщении - это символ из асма или русского языка? а то в НАСМ они запрещены
Номер ответа: 8
Автор ответа:
D o c a l
ICQ: 408802757
Вопросов: 76
Ответов: 985
Web-сайт:
Профиль | | #8
Добавлено: 14.09.08 21:27
Ну да вроде
[wasm.ru]
DATA - Эта секция содеpжит инициализиpованные данные вашей пpогpаммы.
.DATA? - Эта секция содеpжит неинициализиpованные данные вашей пpогpаммы. Иногда вам нужно только *пpедваpительно* выделить некотоpое количество памяти, но вы не хотите инициализиpовать ее. Эта секция для этого и пpедназначается. Пpеимущество неинициализиpованных данных следующее: они не занимают места в исполняемом файле. Hапpимеp, если вы хотите выделить 10.000 байт в вашей .DATA? секции, ваш exe-файл не увеличиться на 10kb. Его pазмеp останется таким же. Вы всего лишь говоpите компилятоpу, сколько места вам нужно, когда пpогpамма загpузится в память.[/wasm.ru]
Номер ответа: 9
Автор ответа:
D o c a l
ICQ: 408802757
Вопросов: 76
Ответов: 985
Web-сайт:
Профиль | | #9
Добавлено: 14.09.08 21:33
#
# pusha
# mov eax, [esp+36]
а зачем так убийствено????
чем тебе pop не угодил??
Номер ответа: 10
Автор ответа:
D o c a l
ICQ: 408802757
Вопросов: 76
Ответов: 985
Web-сайт:
Профиль | | #10
Добавлено: 14.09.08 21:41
сори #9 бред не розобралса что написано #7
Номер ответа: 11
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #11
Добавлено: 14.09.08 21:41
а, ну это в макросе или субрутине - входные параметры передаются через стек и чтоб всё было пучком, вначале я пишу pusha а в конце popa (каждый раз ржу на этими псевдокомандами)... а потом чтоб достать нижний горшок из стопки как в операции Ы , я делаю [esp+36], [esp+40] итд..
По поводу "?"... по моему насм их не поддержиавет.
Номер ответа: 12
Автор ответа:
D o c a l
ICQ: 408802757
Вопросов: 76
Ответов: 985
Web-сайт:
Профиль | | #12
Добавлено: 15.09.08 00:28
ну я лично х то что я писал справедливо для masm
Номер ответа: 13
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #13
Добавлено: 15.09.08 11:54
лол... адрес [esi+8] = esi+8 ))
Ну и как ты его вычислишь?
Не айс:
mov eax, esi
add esi, 8
Айс:
lea eax, [esi+8]
Номер ответа: 14
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #14
Добавлено: 16.09.08 01:33
любите offset & lea
Я люблю!! Честно!
Номер ответа: 15
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #15
Добавлено: 16.09.08 05:01
классно! не знал про леа... а чё такое оффсет?