2017-02-11 18 views
2

Как проект университета безопасности, я должен закодировать PE-инфекцию. Но я новичок в сборке, поэтому у меня многократный сбой из-за моего незнания того, как обрабатывать переменные.Доступ к переменным в сборке (MASM32)

Я знаю, что в обычной программе есть раздел .data для инициализированных переменных и .data? для неинициализированных переменных.

Но в этом случае каждый учебник, похоже, согласен с тем, что переменные должны быть определены в разделе .code.

Что приводит к чему-то вроде этого:

.386 
.model flat, stdcall 
option casemap:none 
include \masm32\include\masm32rt.inc 
.code 
start: 
    mov stuff, 1 
    ret 


stuff dd ? 

end start 

К сожалению, это приводит к ошибке сегментации, и я не могу понять, почему.

В качестве другого примера:

.386 
.model flat, stdcall 
option casemap:none 
include \masm32\include\masm32rt.inc 
.code 
start: 
    invoke MessageBoxA, 0, offset hello, offset hello, MB_OK 
    ret 


hello db  "Hello buddy", 0 

end start 

Это один не компилируется, так как переменная привет неизвестна на компиляции (сборки: р) время, которое кажется законным для меня, но потом ... что путь?

+0

Это странно, но первая строка моего сообщения систематически удаляется, даже если я ее редактирую ... но я действительно приветствовал: p – FTW

+0

В соответствии с политикой сайта вы не должны добавлять приветствия, такие как «Hello», и «Спасибо за вашу помощь» на ваш пост. Вероятно, поэтому сайт автоматически удаляет эти (?) – fuz

+0

oh ... okay then – FTW

ответ

1

Большинство операционных систем запрещают запись в сегмент кода как часть их защиты от вредоносных программ. Это затрудняет заражение кода. :-)

invoke - макрос, который, вероятно, должен будет увидеть все его аргументы во время компиляции, чтобы его можно было правильно развернуть. Он не может легко использовать вещи, которые появляются позже в коде, поэтому вы должны убедиться, что он появился раньше. Здесь, например, адрес hello будет зависеть от размера расширения макроса.

Ссылки на данные, например, в вашем mov stuff,1, имеют фиксированный размер и могут быть скорректированы позже. Возможно, на втором этапе сборщика или линкером.

+0

Я действительно не понимаю вашу точку зрения. Разве у нас нет переселений именно для этой проблемы? – fuz

+0

ОК для вызова, я сделал несколько тестов, и это работает, но как насчет ** материала **? Я не уверен, что понимаю, что я должен делать. Использование LOCAL переменных? – FTW

+0

fuz: Я игнорирую, что это такое – FTW