[ Assembler ] — начинающим: задаем вопросы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by !_filin_!, 25 May 2007.

  1. neviens

    neviens Member

    Joined:
    9 Oct 2013
    Messages:
    82
    Likes Received:
    28
    Reputations:
    3
    ;...
    F proc uses esi arr
    mov esi, arr
    xor eax, eax
    mov cx, [esi]
    mov edx, 1​
    L0:
    cmp [esi+2*edx], cx
    jne @F

    inc eax​
    @@:
    inc edx
    cmp edx, 5
    jb L0

    ret​
    F endp
    end
     
    1. st55

      st55 Level 8

      Joined:
      20 Apr 2016
      Messages:
      196
      Likes Received:
      344
      Reputations:
      47
      Есть строка
      PHP:
      hash db 'test'0
      Как мне содержимое hash поместить сюда (в сам параметр)?
      PHP:
      invoke  InternetOpenUrl, [hs], 'http://127.0.0.1:81/report.php?hash=1'0000
       
      1. neviens

        neviens Member

        Joined:
        9 Oct 2013
        Messages:
        82
        Likes Received:
        28
        Reputations:
        3
        .686
        .model flat, stdcall
        option casemap:none
        include \masm32\include\windows.inc
        include \masm32\include\wininet.inc
        include \masm32\include\kernel32.inc
        includelib \masm32\lib\wininet.lib
        includelib \masm32\lib\kernel32.lib
        include \masm32\Macros\Strings.mac

        .const
        hash db 'test', 0
        .data
        hs dd ?

        .code
        start:
        invoke InternetOpenUrlA, hs, $CTA0("http://127.0.0.1:81/report.php?hash=1"), OFFSET hash, 0, 0, 0
        invoke ExitProcess, 0
        END start
         
        1. skibidi

          skibidi Banned

          Joined:
          31 Oct 2018
          Messages:
          6
          Likes Received:
          0
          Reputations:
          0
          А какими платформами вы пользуетесь для работы с асм? Или тут все на линухе и ни в чем не нуждаются?)
           
          1. #colorblind

            #colorblind Moderator

            Joined:
            31 Jan 2014
            Messages:
            637
            Likes Received:
            246
            Reputations:
            42
            а что, в линухе асм отменили? лично я юзаю масм под вин.
             
            1. FK-

              FK- Member

              Joined:
              25 Dec 2018
              Messages:
              31
              Likes Received:
              12
              Reputations:
              0
              да нет, я вот через месяц сяду въезжать в NASM
               
              1. xverizex

                xverizex New Member

                Joined:
                3 Jul 2017
                Messages:
                7
                Likes Received:
                0
                Reputations:
                2
                Делаю дизассемблер с возможностью вставки кода в любое место. И вот появилась проблема.
                Если написать такой код, например для получения локальной переменной ( это же для этого так? )
                Code:
                mov eax, [ebp + 0x01]
                То это один опкод.
                А если так
                Code:
                мov eax, [ebp + 0x101]
                То это уже другой машинный код команды. Так как я захотел в программе функционал вставки любого количества кода ( чтобы не нужно было писать jmp на пустое место и там производить операции ), то я отслеживаю некоторые команды. Например я отслеживаю команды lea. И если вставить код всередину, то в lea измениться адреса. Но как быть с такой адресацией, которую я привёл. Если с mov eax, [ebp + 1] понятно, там только с байт адресоваться можно на машинном коде, но если вписать число больше 255, то поменяется опкод и будет четырех байтным. Вместо этого числа может быть не число как таковое, а указатель на переменную в секции данных. А если это не указатель на данные, а указатель на стэк, только может ли быть в стеке элементов больше 255 байт? Ну может быть так никто не делает, но локальные переменных то может быть больше 255. Это локальные переменные вроде так получаются с помощью mov eax, [ebp - 8] например. Может ли быть, что в стеке будет локальных переменных больше 255? Тогда появляется проблема с адресацией. Пока что моя программа не поймёт на что указывает, если только не предусматривать сравнение адреса с секцией данных, тогда возможно понять что это к данным имеет дело.