@Narts

Корректный ли ассемблерный код?

Имеется файл с ассемблерными инструкциями:
[SECTION .text]
BITS 32
global_start:
_start:
jmp GetCommand
Command_Return:
pop ebx
xor eax, eax
push eax
push ebx
mov ebx, 0x77755210
call ebx
xor eax, eax
push eax
mov ebx, 0x77739fe0
call ebx
GetCommand:
call Command_Return
db "REG DELETE HKCU\keys /v key"
db 0x00

, где 0x77755210 - адрес WinExec в Kernel32.dll, 0x77739fe0 - адрес ExitProcess в том же Kernel32.dll.

Так вот, суть кода (в теории) заключается в удалении флага из реестра.

Чтобы получить .exe файл, я использую nasm и линкер (это так называется?) GoLink.
Компилю следующими командами:
nasm -f win64 test.asm
golink test.obj kernel32.dll user32.dll test.exe


Получаю на выходе exeшник, и при его запуске, как я понял, из реестра должен удаляться заданный флаг, но этого не происходит. Подскажите пж, в чем может быть проблема?
  • Вопрос задан
  • 222 просмотра
Пригласить эксперта
Ответы на вопрос 3
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Подскажите пж, в чем может быть проблема?

Скорее всего в том, что ты не умеешь пользоваться отладчиком.

Вообще код выглядит нормально. Предлагаю написать в консоли REG DELETE HKCU\keys /v key и убедиться, что желаемое действие происходит (я так понимаю, что keys и key -- это затычки, в реальном коде указаны конкретный путь в реестре и конкретное имя значения).

Для разнообразия можно убрать xor eax, eax после возврата из WinExec, чтобы результат пришёл в ExitProcess -- и посмотреть на код завершения процесса.
Ответ написан
dollar
@dollar
Делай добро и бросай его в воду.
В коде не хватает комментариев. Добавьте комментарии с пояснениями, где что означает и где что происходит. Тогда вам же будет проще понять. Даже в языках высокого уровня очень желательно комментировать не очевидный код, а уж ассемблер сам бог велел.
Ответ написан
freeExec
@freeExec
Участник OpenStreetMap
где 0x77755210 - адрес WinExec в Kernel32.dll, 0x77739fe0 - адрес ExitProcess в том же Kernel32.dll.

Это так не работает, адреса всегда разные.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы