fasm: хрень какая-та...

Тема в разделе "WASM.HEAP", создана пользователем CodeWorld, 31 окт 2005.

  1. CodeWorld

    CodeWorld New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2005
    Сообщения:
    46
    Я опять что-то не так делаю или че? =) Есть файл X, он инклудит кучу файлов, но важны только файлы A и B. A - содержит некоторый код и описание структуры:



    struc TObject

    {

    dd 0x0

    dd 0x0

    dd 0x0

    dd 0x0

    dd 0x0

    dd 0x0

    }



    Файл B в начале себя содержит "SomeObject TObject", после чего функцию f1 и f2. На функцию f1 делается кол в файле который инклудится к файлу, который в свою очередь тоже инклудится к X =) Функция f1 это всего лишь:



    f1:

    jmp $



    Буду короче. После call, вываливаюсь на страничном отказе. Если до call сделать jmp $ то могу весеть вечность - все стаблильно. Замаплено все верно. Посмотрел на какой инструкци выпадаю - add byte [eax],al. У меня такого нигде нет. Поменял местами f1 и f2. Теперь f1 пашет. Поменял их обратно местами, кинул "SomeObject TObject" в конец файла и все работает.
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    Ты уверен? Это же нули :) их там должно быть полно, или прыгаешь на них или затираешь код
     
  3. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    include code.asm

    include structures.inc



    так вот если код использует структуры которые описаны в structures.inc то будет ошибка вот так вот сначала инклудим структуры потом код
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    doctor_Ice

    Прилепи код или пример в аттаче, иначе это гадание по кофейной гуще.
     
  5. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    попробуйте компильнуть бир асм и бэд бир асм :)

    смотрите разницу все как я и говорил

    фасм 1.64

    [​IMG] 1196766690__ex.rar
     
  6. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    да кстати меня это реально бесит все инки со структурами выносить в начало. это нуна в фасме пофиксить! кто общается с разработчиками прошу вас укажите им на этот баг.
     
  7. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    doctor_Ice

    "illegal instruction.", даже не компилится.





    Какие все? Тебя одна строчка "include 'win32a.inc'"
    ? Нервишки шалят, батенька.
     
  8. CodeWorld

    CodeWorld New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2005
    Сообщения:
    46
    >Ты уверен? Это же нули :)

    Ну так и я к этому и кланю - fasm прыгает на экземпляр структуры (которая забита нулями). Мне кажется ошибка у фасма. Структура наезжает на начало функции



    >так вот если код использует структуры которые описаны в structures.inc то будет ошибка

    doctor_Ice, у меня там все ок:



    include "mystruc.asm"

    include "mycode.asm"



    зы: я юзаю тоже 1.64. Да даже если бы было наоборот я же говорю, что когда функция не рядом (но в том же файле) с экземляром структуры, то всё ок. Тут что то другое.
     
  9. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine


    ???

    Вы о чём? Объявление структуры - сугубо "виртуальное", никаких данных она не создаёт. Другое дело, определение.





    Фасм никуда не прягает :)



    В общем, код в студию. Чудес не бывает.
     
  10. CodeWorld

    CodeWorld New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2005
    Сообщения:
    46
    >Вы о чём? Объявление структуры - сугубо "виртуальное", никаких данных она не создаёт.

    Я имею ввиду описанный екземляр SomeObject. Наезжает во время ассемблирования, вот я и говорю что структура наехала и пальцы веером ;)



    >Фасм никуда не прягает :)

    Зато jmp асмит как прыжок на SomeObject =)



    Я код не очень хочу выкладывать. Ща делаю облегченный екзамл, скоро выложу
     
  11. CodeWorld

    CodeWorld New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2005
    Сообщения:
    46
    Вообщем я тут поэксперементировал. Размер файла все время одинаковый. Т.е. действительно ни кто ни накого не наезжает =) Ошибка в call f1, который как я сказал описан в инклуде, который прикреплен до инклудов со структурой и ф1. Но тем не менее мне пока не удалось сделать такой же екзампл... Дизасма еще талкого нет. Киллерский kWdsm некоторые файлы просто отказывается дизасмить без всяких сообщений. Hiew смешанный код (32х битный и 16 битный) не умеет разбирать (или умеет?). Посоветуйте че нить нормальное и что реально вытянуть (в переделах 3х метров)?
     
  12. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Ну, по описанию проблему понял. Но как это может быть — не представляю.



    Получается, фасм "call f1" ассемблирует в "call SomeObject"? Не верю :)





    Попробуй дизасмить по кусочкам, правда, я не в курсе, как переключаться в нём между режимами.
     
  13. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    IceStudent

    "illegal instruction.", даже не компилится



    естесно бэд бир не компилится а бир компилится. разница между ними тока в том что инклюд в бэд бере после кода. вывод из этого такой компилятор сыроват ибо получается вот что



    mov eax, d_w_p [ebp+WindowProcMsg.wpm_hwnd]

    retn



    struct WindowProcMsg

    wpm_hwnd dd ?

    wpm_wmsg dd ?

    wpm_wparam dd ?

    wpm_lparam dd ?

    ends



    вот на муве мы получим ошибку ибо фасм ничего не знает о WindowProcMsg.wpm_hwnd поскольку он не ищет определения структур дальше по файлу :dntknw: доходит до первого незнакомого определения и спотыкается на нем :dntknw:



    IceStudent

    Какие все? Тебя одна строчка "include 'win32a.inc'" „реально бесит“? Нервишки шалят, батенька.



    include 'c:\fasm\include\win32a.inc'



    include 'c:\Assembler\bin\fasm\sys_inc\windows.inc'



    section '.d_ice' code readable writable executable



    ;% my incs

    include 'equals.inc'

    include 'patch_inc.inc'





    ;% lib incs

    ; global server

    include 'global_server_total_inc.asm'



    ; sys engine

    include 'sys_engine.inc'



    ; branch engine

    include 'branch.inc'



    ; exec engine

    include 'exec_engine.inc'





    ; file work engine

    include 'filework_engine.inc'



    ; strings engine

    include 'string_work.inc'



    сдесь код инициализации



    ;% main stuff

    ; global server

    include 'global_server.asm'



    ; initialize

    include 'initial.asm'



    ; main engine

    include 'maineng.asm'



    ; windows handlers

    include 'winwnds.asm'



    ;% libs



    ; branch engine

    include 'branch.asm'



    ; exec engine

    include 'exec_engine.asm'



    ; sys engine

    include 'sys_engine.asm'



    ; file work engine

    include 'filework_engine.asm'



    ; strings engine

    include 'string_work.asm'





    вот так вот батенька не симпотично выходит :dntknw: гораздо приятнее еслиб каждый подключаемый кусок кода сам присоеденял свои струтуры а выносить все эти инки со структурами в начало особенно в большом проекте малость напрягает.
     
  14. CodeWorld

    CodeWorld New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2005
    Сообщения:
    46
    >Но как это может быть — не представляю.

    Я тоже %) Пытаюсь воспроизвести реальные условия. Сделал такое же кол-во и структуру инклудов. Пока не получается. Да и без нормального дизасма трудно. Я ща еще попробую и если не получится, то сделаю битую версию сорцов и выложу



    >Получается, фасм "call f1" ассемблирует в "call SomeObject"? Не верю :)

    Зря ;) Скоко не парился, скоко не пытался свалить баг на себя, ничего не нашел. Кидаю SomeObject в конец файла, асмю, размер файла тот же, но уже работает. Значит Call не туда делается. Но мне нужен дизасм чтобы все перепроверить



    А на крайняк можно прямо Томашу отправить оригинальный код %)
     
  15. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    doctor_Ice



    Это не препроцессор, чтобы гоняться за константами и макросами по всем файлам. Есть ли хоть один асм, ищущий объявления структур?





    Вынеси всё это в отдельный файл и подплючай только его. Красивее будет :)





    А ещё б приятнее, если бы фасм компилировал проги, создаваемые в уме, тогда и писать ничего не пришлось бы.
     
  16. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    IceStudent

    Есть ли хоть один асм, ищущий объявления структур?

    если фасм станет первым тем больше ему уважения ведь это совсем нетрудно. я бы мог и свою накатать тока некогда счас да я и не люблю весь этот навесной монтаж :)



    да кстати похоже у тебя нервишки точно шалят. хотя мож мне и показалось
     
  17. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    doctor_Ice




    Не верю, и это кстати что за d_w_p?
     
  18. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    d_w_p = dword ptr

    w_p = word ptr

    ...
     
  19. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Выбирай любой способ, проблема со структурой (дальше по файлу) осталась?
    Код (Text):
    1. mov   eax,dword ptr ebp+WindowProcMsg.wpm_wmsg
    2. mov   eax,[ebp+WindowProcMsg.wpm_wmsg]
    3. mov   eax,dword [ebp+WindowProcMsg.wpm_wmsg]
     
  20. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    качни пример. яж вылаживал там один файл где структуры инклюдятся в начале а один где в конце и тот где в конце не компилируется.