Конференция "Основная" » Скомпилить ASM код [D7, WinXP]
 
  • QAZ © (24.06.18 15:37) [0]
    есть некий код на асамблере с вызовом системной скрытой функции, как заставить его скомпилировать?
    mov eax,[ebp-$08]
    call @WStrLen
    push eax
    ошибка неизвестная функция
  • Sha © (24.06.18 16:26) [1]
    CALL System.@WStrLen
  • QAZ © (24.06.18 16:45) [2]

    > Sha ©   (24.06.18 16:26) [1]

    хм, ок
    а почему вообще пишется через @ ведь функцию зовут _WStrLen?
  • Sha © (24.06.18 17:42) [3]
    это к борланду )
  • QAZ © (24.06.18 17:50) [4]
    а вот такая операция никак не хочет компилится
    jle +$56
    пишет инвалидная комбинация опкода и операнда
  • Sha © (24.06.18 19:15) [5]
    нужна метка
  • QAZ © (24.06.18 19:52) [6]
    но такой код показывает сам делфи в цпу отладчике
    если скопировать этот код и заменить на коректные метки, он компилится но не работает
    без отладчика бесконечный цикл, а под делфей рунтаймеррор
  • Sha © (24.06.18 20:22) [7]
    ну и что?
  • Германн © (25.06.18 02:48) [8]

    > QAZ ©   (24.06.18 19:52) [6]
    >
    > но такой код показывает сам делфи в цпу отладчике
    > если скопировать этот код и заменить на коректные метки,
    >  он компилится но не работает

    Редактор, компилятор и отладчик Дельфи разрабатывают разные люди. Их совместимость гарантируется при разработке программ на Дельфи.

    >  QAZ ©   (24.06.18 17:50) [4]
    >
    > а вот такая операция никак не хочет компилится
    > jle +$56

    А она и не должна компилироваться. Это строка отладчика.
  • KSergey © (09.07.18 11:47) [9]
    короче, посмотри по отладчику на какую строку асм кода происходит переход - к этой строке поставь метку и метку впиши к jle
  • Дмитрий Белькевич © (31.07.18 19:00) [10]
    +$56 - это реальное значение текущего бинарника, а тебе нужна метка для того, что бы на неё перейти. если сильно хочется - можно и +$56 закодировать. другое дело - что может так получится, что ты не туда попадешь. как повезет. поэтому так и нельзя. а можно только по меткам.
  • Inovet © (31.07.18 23:56) [11]
    > [10] Дмитрий Белькевич ©   (31.07.18 19:00)

    Вообще есть короткие и длинные переходы. Короткие как раз относительные, так что кусок можно переносить без изменений, если в нём ничего не менять. Или теперь уже все переходы одиниковые? Ясно дело, что надо метки использовать, а смещения пусть компилятор вычисляет, иначе зачем он нужен тогда.
  • Игорь Шевченко © (01.08.18 10:25) [12]
    Inovet ©   (31.07.18 23:56) [11]

    Длинные тоже относительные, учить матчасть надо, прежде чем вылезать с предположениями.
  • Inovet © (01.08.18 21:09) [13]
    > [12] Игорь Шевченко ©   (01.08.18 10:25)

    Ну здесь про условный переход, так что всегда короткий и относительный.
  • Inovet © (01.08.18 21:20) [14]
    > [13] Inovet ©   (01.08.18 21:09)
    > короткий и относительный

    относительный
  • имя (02.08.18 03:04) [15]
    Удалено модератором
  • Игорь Шевченко © (02.08.18 10:19) [16]
    Inovet ©   (01.08.18 21:09) [13]

    Дружище, в коде на Delphi, который показывает отладчик, команды перехода могут быть только двух и пятибайтные. Других там быть не может по определению, компилятор не умеет их генерировать. Так вот, и те и другие - относительные, в них содержится смещение относительно текущего адреса команды + ее длина.
  • имя (03.08.18 03:02) [17]
    Удалено модератором
 
Конференция "Основная" » Скомпилить ASM код [D7, WinXP]
Есть новые Нет новых   [118690   +20][b:0][p:0.001]