Я опять что-то не так делаю или че? =) Есть файл 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" в конец файла и все работает.
include code.asm include structures.inc так вот если код использует структуры которые описаны в structures.inc то будет ошибка вот так вот сначала инклудим структуры потом код
попробуйте компильнуть бир асм и бэд бир асм смотрите разницу все как я и говорил фасм 1.64 1196766690__ex.rar
да кстати меня это реально бесит все инки со структурами выносить в начало. это нуна в фасме пофиксить! кто общается с разработчиками прошу вас укажите им на этот баг.
doctor_Ice "illegal instruction.", даже не компилится. Какие все? Тебя одна строчка "include 'win32a.inc'" ? Нервишки шалят, батенька.
>Ты уверен? Это же нули Ну так и я к этому и кланю - fasm прыгает на экземпляр структуры (которая забита нулями). Мне кажется ошибка у фасма. Структура наезжает на начало функции >так вот если код использует структуры которые описаны в structures.inc то будет ошибка doctor_Ice, у меня там все ок: include "mystruc.asm" include "mycode.asm" зы: я юзаю тоже 1.64. Да даже если бы было наоборот я же говорю, что когда функция не рядом (но в том же файле) с экземляром структуры, то всё ок. Тут что то другое.
??? Вы о чём? Объявление структуры - сугубо "виртуальное", никаких данных она не создаёт. Другое дело, определение. Фасм никуда не прягает В общем, код в студию. Чудес не бывает.
>Вы о чём? Объявление структуры - сугубо "виртуальное", никаких данных она не создаёт. Я имею ввиду описанный екземляр SomeObject. Наезжает во время ассемблирования, вот я и говорю что структура наехала и пальцы веером >Фасм никуда не прягает Зато jmp асмит как прыжок на SomeObject =) Я код не очень хочу выкладывать. Ща делаю облегченный екзамл, скоро выложу
Вообщем я тут поэксперементировал. Размер файла все время одинаковый. Т.е. действительно ни кто ни накого не наезжает =) Ошибка в call f1, который как я сказал описан в инклуде, который прикреплен до инклудов со структурой и ф1. Но тем не менее мне пока не удалось сделать такой же екзампл... Дизасма еще талкого нет. Киллерский kWdsm некоторые файлы просто отказывается дизасмить без всяких сообщений. Hiew смешанный код (32х битный и 16 битный) не умеет разбирать (или умеет?). Посоветуйте че нить нормальное и что реально вытянуть (в переделах 3х метров)?
Ну, по описанию проблему понял. Но как это может быть — не представляю. Получается, фасм "call f1" ассемблирует в "call SomeObject"? Не верю Попробуй дизасмить по кусочкам, правда, я не в курсе, как переключаться в нём между режимами.
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 поскольку он не ищет определения структур дальше по файлу доходит до первого незнакомого определения и спотыкается на нем 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' вот так вот батенька не симпотично выходит гораздо приятнее еслиб каждый подключаемый кусок кода сам присоеденял свои струтуры а выносить все эти инки со структурами в начало особенно в большом проекте малость напрягает.
>Но как это может быть — не представляю. Я тоже %) Пытаюсь воспроизвести реальные условия. Сделал такое же кол-во и структуру инклудов. Пока не получается. Да и без нормального дизасма трудно. Я ща еще попробую и если не получится, то сделаю битую версию сорцов и выложу >Получается, фасм "call f1" ассемблирует в "call SomeObject"? Не верю Зря Скоко не парился, скоко не пытался свалить баг на себя, ничего не нашел. Кидаю SomeObject в конец файла, асмю, размер файла тот же, но уже работает. Значит Call не туда делается. Но мне нужен дизасм чтобы все перепроверить А на крайняк можно прямо Томашу отправить оригинальный код %)
doctor_Ice Это не препроцессор, чтобы гоняться за константами и макросами по всем файлам. Есть ли хоть один асм, ищущий объявления структур? Вынеси всё это в отдельный файл и подплючай только его. Красивее будет А ещё б приятнее, если бы фасм компилировал проги, создаваемые в уме, тогда и писать ничего не пришлось бы.
IceStudent Есть ли хоть один асм, ищущий объявления структур? если фасм станет первым тем больше ему уважения ведь это совсем нетрудно. я бы мог и свою накатать тока некогда счас да я и не люблю весь этот навесной монтаж да кстати похоже у тебя нервишки точно шалят. хотя мож мне и показалось
Выбирай любой способ, проблема со структурой (дальше по файлу) осталась? Код (Text): mov eax,dword ptr ebp+WindowProcMsg.wpm_wmsg mov eax,[ebp+WindowProcMsg.wpm_wmsg] mov eax,dword [ebp+WindowProcMsg.wpm_wmsg]
качни пример. яж вылаживал там один файл где структуры инклюдятся в начале а один где в конце и тот где в конце не компилируется.