На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> Mov относительно текущего адреса
Как сделать MOV относительно текущего адреса? К примеру:
(Адрес 000000С0h): MOV [000000CF], ESP
то есть я запишу ESP по глобальному адресу 000000CF
Можно как-нибудь вместо адреса указать смещение относительно текущего адреса?
ну что то типа MOV [+10], ESP
и ESP запишется по адресу 000000С0h + 10h?
В 64-битном можно. В 32-х (и ранее) - нет.
Где-то видел подобный доступ к IP
ExpandedWrap disabled
    call x
    x:
      pop esi
      mov [esi+10], byte ptr 12h
но не уверен, что HIPS (поведенческий анализ антивируса) пропустит такое.
Плюс к этому нужно менять атрибуты сегмента кода на writeable.
Я просто думал, правильно задать адрес смещением а не точным адресом...
Цитата Федосеев Павел @
но не уверен, что HIPS (поведенческий анализ антивируса) пропустит такое.
Адекватные антивирусы на такую ерунду реагировать не будут, т.к. это нередко используется во вполне безопасных прогах.

Цитата Федосеев Павел @
Плюс к этому нужно менять атрибуты сегмента кода на writeable.
Ну или сразу задать при создании проги. Если пишем в код, конечно.

Цитата Rzonex @
Я просто думал, правильно задать адрес смещением а не точным адресом...
Что значит "правильнее"?
Когда пишем прогу, используем имена переменных. И линковщик уже сам подставляет туда абсолютные адреса (и, если надо, fixup'ы создаёт, но это для DLL актуально).

А если это позиционно-независимый код, тогда как Павел написал (только esi по соглашению нужно сохранять, так что я бы другой регистр использовал – eax, edx, ecx, – но тут, опять же, всё от ситуации/задачи зависит).

В 64-х битах можно указывать переменную, fasm по умолчанию использует относительную адресацию, NASM – абсолютную, но это исправляется либо директивой default rel (распространяется на весь последующий код, default abs – возврат к абсолютной), либо указанием rel непосредственно в инструкции, например, mov eax,[rel MyVar],al. И тогда вот такой код будет позиционно-независимым.
ExpandedWrap disabled
      mov al,0x90  ; nop
      mov [rel MyVar],al
    MyVar:
      ret
Но это только в 64 битах.
vpmultishiftqb vscatterpf0dps vfmsubadd132pd vgatherpf1dps vpclmulhqlqdq vcmptrue_ussd vaeskeygenassist
Цитата Rzonex @
Как сделать MOV относительно текущего адреса?

текущий адрес - это символ доллара $
например вписать NOP за 2 байта от себя можно так:
ExpandedWrap disabled
    mov   [$+2],90h
Бог знает суть. Подробности нашёптывает дьявол.
В общем, пока TC не конкретизирует:
• под какую ОС и разрядность он пишет,
• позиционно-зависимый или независимый (перемещаемый) код ему нужен,
• на какой ассемблере он пишет (желательно),
подсказать верный рецепт будет затруднительно.
vpmultishiftqb vscatterpf0dps vfmsubadd132pd vgatherpf1dps vpclmulhqlqdq vcmptrue_ussd vaeskeygenassist
1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
0 пользователей:


Рейтинг@Mail.ru
[ Script Execution time: 0,0972 ]   [ 19 queries used ]   [ Generated: 21.04.19, 12:45 GMT ]