· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Прошу помочь найти выход.

Посл.отвђт Сообщенiе


Дата: Сен 23, 2004 22:38:02

Есть код мне надо в .0030100E передать управление на .00401038, потом
вернуться на .00401018. В этом случае приложение отказывается работать
после .00401018.
Какой должен быть правильный маш.код в .0040103E, чтобы прога работала
нормально?

.00401000: 6A00 push 000
.00401002: 6800304000 push 000403000 -----v (1)
.00401007: 6819304000 push 000403019 -----v (2)
.0040100C: 6A00 push 000
.0040100E: E81F000000 call MessageBoxA ;USER32.dll --

.00401013: E826000000 call .00040103E -----v (4)

->.00401018: 6A00 push 000

.0040101A: 6832304000 push 000403032 -----v (5)
.0040101F: 6800E80700 push 00007E800 ;" •ш "
.00401024: 6A00 push 000
.00401026: E807000000 call MessageBoxA ;USER32.dll --
.0040102B: 6A00 push 000
.0040102D: E806000000 call ExitProcess ;KERNEL32.dll
.00401032: FF2508204000 jmp MessageBoxA ;USER32.dll
.00401038: FF2500204000 jmp ExitProcess ;KERNEL32.dll

/? .0040103E: C3 retn


Дата: Сен 23, 2004 22:43:49

„передать управление на .00401038, потом
вернуться на .00401018.“


Бесполезно , после 00401038 ты уже никуда не вернёшся :))


Дата: Сен 23, 2004 22:49:35

Тода что подвинут эти байты и поэкспереминтировать так с самомодификацией? (ff 25...)


Дата: Сен 23, 2004 23:08:34

„Тода что подвинут эти байты “

Подвинуть можно жену в кровати , а в ассемблере это как ? :) Тебя чтоб понять , надо уйму извилин напрячь , старайся лучше восемь раз , разными предложениями объяснить один вопрос , чем двумя словами все .

"FF25..." тут jmp в KERNEL32.dll на код ф-ции ExitProcess , она управление не возвращает .


Дата: Сен 23, 2004 23:20:47

Это понятно, я хотел попробывать изменить характреристики секции кода на запись и поэксперементировать за этим по изменял немного 2 урок Исцелиона, что привело к коду выше.
сначала я в хью сделал без инструкции в .00401013 все работало потом немного сместил, есно и поправки в коде сделал перестало работать. Думаю сместить код в .401032 по ниже чтобы до него сделать че нить с самомодификацией и понаблюдать за реакцией винды. или как лучше это все обставить?


Дата: Сен 23, 2004 23:30:20

Ладно как от call`a возвратиться? Какой маш код, если не каких параметров не передается?


Дата: Сен 23, 2004 23:51:52 · Поправил: bogrus

Так ret у тебя стоит в том месте , куда call указывает , всё правильно , после него переходишь к следующей за call (т.е. 00401018) , а там должен выскочить второй месаджбокс (правда с кривыми параметрами - " •ш ") , потом прога завершаеться .

Что у тебя не работает , ты хотел сделать так ?
        invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK
        call   @F
        invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK
        invoke ExitProcess,NULL
@@:     ret


Вот кстати как масм может тоже и без лишних джампов :
00401000 >/$  6A 00         PUSH 0                                          ; /Style = MB_OK|MB_APPLMODAL
00401002  |.  68 00304000   PUSH msgbox.00403000                            ; |Title = "Iczelion's tutorial no.2"
00401007  |.  68 19304000   PUSH msgbox.00403019                            ; |Text = "Win32 Assembly is Great!"
0040100C  |.  6A 00         PUSH 0                                          ; |hOwner = NULL
0040100E  |.  FF15 08204000 CALL NEAR DWORD PTR DS:[<&user32.MessageBoxA>]  ; \MessageBoxA
00401014  |.  E8 1C000000   CALL msgbox.00401035
00401019  |.  6A 00         PUSH 0                                          ; /Style = MB_OK|MB_APPLMODAL
0040101B  |.  68 00304000   PUSH msgbox.00403000                            ; |Title = "Iczelion's tutorial no.2"
00401020  |.  68 19304000   PUSH msgbox.00403019                            ; |Text = "Win32 Assembly is Great!"
00401025  |.  6A 00         PUSH 0                                          ; |hOwner = NULL
00401027  |.  FF15 08204000 CALL NEAR DWORD PTR DS:[<&user32.MessageBoxA>]  ; \MessageBoxA
0040102D  |.  6A 00         PUSH 0                                          ; /ExitCode = 0
0040102F  \.  FF15 00204000 CALL NEAR DWORD PTR DS:[<&kernel32.ExitProcess>]; \ExitProcess
00401035   $  C3            RETN


Дата: Сен 24, 2004 00:13:16

Что у тебя не работает , ты хотел сделать так ?
Именно но хотел ручками,через хью уже в готовом
invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK
; call @F
invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK
invoke ExitProcess,NULL
;@@: ret


Дата: Сен 24, 2004 09:36:07

Блин скажите пожалуйста дату выхода в свет хью, я эту дату за дату программиста возьму. Ваще рульный прога.


Дата: Сен 25, 2004 17:17:49

Володя.

Взял таблицу секций от calc.exe w2k sp4 и думаю где же точка
входа гланул на 4й dword говорит, что 00000600 гляжу и вижу,
что то где останавливается олли или сайс, т.е. на 55 8B не по-
хоже. А потом смотрю все четвертые цифры 77 и тут доперло, что
это похоже на импорт. :) Вот ведь поглючило.
Че это за хрень какого хера в начале не 55 8B, а какой то "лож-
ный импорт" глянул в DATA_DIRECTORY тама есть bound может, это
как то влияет?

Ты уж не взыщи задолбался по обрывакам информацию собирать,т.к.
в Питреке джунгли да и в твоих статьях не меньше прохода. :(

Мне еще интересно на этапе компиляция код должен начинать, чо
нить вроде этого:
int main()
{
... то что идет ниже как я думаю должно ложиться в секцию кода
и на это место должен указывать PointerRawData!
Так ли это?


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.123