На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное 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 битах.
              Цитата Rzonex @
              Как сделать MOV относительно текущего адреса?

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


                Рейтинг@Mail.ru
                [ Script execution time: 0,0464 ]   [ 15 queries used ]   [ Generated: 28.03.24, 10:00 GMT ]