непонятно с названиями секций

Тема в разделе "WASM.ASSEMBLER", создана пользователем La_plaza, 8 сен 2008.

  1. La_plaza

    La_plaza New Member

    Публикаций:
    0
    Регистрация:
    20 авг 2008
    Сообщения:
    95
    в общем незнаю что это такое, но у меня вместо секций .CODE .DATA и тд
    стоит всего две секции: .flat .idata. Причем даже это происходит на тех бинарниках, которые были созданы дома. Что вообще произошло в системе и как поменять все это безобразие на дефолт ?
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    А чем собирал? Имя '.flat' очень любимо FASM'ом. Именование секций зависит от линкера.
     
  3. La_plaza

    La_plaza New Member

    Публикаций:
    0
    Регистрация:
    20 авг 2008
    Сообщения:
    95
    собирал fasm'om 1.67.21 Дома вроде бы нормально всё, а тут...
     
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.787
    La_plaza
    ".flat" название, которое дает fasm кодовой секции. masm называет эту же секцию секцию ".text" а tasm ".code". В общем случае, название секции может быть любым -- основную смысловую нагрузку несет атрибут секции
     
  5. La_plaza

    La_plaza New Member

    Публикаций:
    0
    Регистрация:
    20 авг 2008
    Сообщения:
    95
    я понял
     
  6. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    La_plaza
    На имена секций ваще забей, кроме как секция ресурсов ".rsrc" остальное системный загрузчик не считает важным !
    Более того ты в секцию ресурсов можешь загнать и код и данные и че угодно и это будет валидным файлом для винды!
     
  7. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.787
    EvilsInterrupt
    Я и ресурсы могу впихнуть в единственную секцию :) и все работает нормально. Можно и вообще все запихать в заголовок, т.е. количество секций равно нулю, а работать будет
     
  8. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Mikl___
    и шо?! Присылай мне файлик, а я гляну, на всех ли виндах работать будет! ;) Я вот тута токо сегодня узнал, что при реализации своей GetProcAddress нельзя обратавать форвардинг, точнее виндовая kernel32.GetProcAddress не обрабатывает форвардинг-ф-ции ! ;)
    Чего сделал ? Занулил размер экспорта, потом написал простенькое приложение загрузил эту длл и ее с аргументом "HeapAlloc", в конечно ожидал что сюдя по строке "ntdll.RtlXXXXX" загрузится эта либа и найдется код переданной ф-ции, а на самом деле увидел строку "ntdll.RtlXXXXX" - это значит. Что сис. загрузчик до вызова GetProcAddress сам смотрит а форвардинг ли ? А если да, то сам распарсивает форвардинг строки и не делегирует это на GetProcAddress, как некоторые об этом думают ! ;)
     
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.787
    EvilsInterrupt
    Смотри в Сам себе Iczelion последние странички, начиная с #121 файлы с ресурсами в секции кода, в #73 MessageBox и вывод простого Окна с нулевым количеством секций, но вот про все винды этого в условии не было -- там для WinXP
     
  10. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    ...чем полностью грохнул механизм форвардинга. Функция считается перенаправленной, если её адрес попадает в секцию экспорта как указано в таблице директорий (от начала таблицы до начала+размер). Так что бочки на GetProcAddress необоснованы :)
     
  11. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    diamond
    +1.
     
  12. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Mikl___
    чувак, а читать умеем ? То что ты говоришь я уже давно описал чуваку строками выше:
    А по поводу нулевого кол-ва секций, скачал архив с #73 и там два файла и хьюев и мой прога и пе-тулз говорят шо в обох по 1 секции есть!
     
  13. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    dermatolog
    У тебя много опыту, к тебе можно прислушаться, но вот я взял kernel32.dll и там есть форвард-функции и занулил таблицу экспорта, далее написал простое приложение:
    Код (Text):
    1.   HMODULE hDll = LoadLibraryA(argv[1]);
    2.   if(hDll)
    3.     FuncRVA = GetProcAddress(hDll,"HeapAlloc");
    4.     FreeLibrary(hDll);
    Но отработала на ура LoadLibraryA и в FuncRVA был адрес на строку "ntdll.RtlXXXXX". Потому и предполагаю, что системный загрузчик сам смотрит на наличие форвард строк.

    т.е. предполагаю если и писать обработку форвардинга, то такому алгоритму:
    1. если по РВА строки имени нашли адрес ф-ции и он попадает в таблицу экспорта, то все кул, иначе отказываемся от поддержки форвардинга
    2. Если все кул, то MyGetProcAddress
    3. Если не кул, то формирование еррор-кода и выход из механизма нахождения адреса по имени\ординалу

    Выделю мысль по п.2. MyGetProcAddress, как оригинальный не шарит никакого форвардинга! потому его надо вызывать, если все кул! Почему я так думаю, потому что если бы GetProcAddress его(форвардниг) понимала бы, то ф-ция вернула бы не указатель на строку, а указатель на саму ф-цию !

    Почему надо отказываться ? Потому что в случае если нет размера экспорта, то вернется рва форвард-строки, что не есть код!
     
  14. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    EvilsInterrupt
    Ещё раз: если занулить размер экспорта, то форвардинг грохнется и соответствующие функции dll грохнутся вместе ним. GetProcAddress вместо адреса реальной функции вернёт rva форвард-строки, но и системный загрузчик тоже вместо адреса реальной функции будет подставлять адрес форвард-строки со всеми вытекающими последствиями.
    Контрольный вопрос: что означает "попадает в таблицу экспорта", если размер таблицы экспорта нулевой?
     
  15. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Можно рабочий пример вот этого? Не первый раз слышу, но самому не удалось заставить работать.
     
  16. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.787
    2EvilsInterrupt
    Читать, то мы умеем, а вот вы читаете невнимательно, у вас "в секцию ресурсов можешь загнать и код и данные ", то есть в файле как минимум две секции: секция кода и секция ресурсов; у меня "ресурсы могу впихнуть в единственную секцию" подразумевалось -- "в секции кода и код и данные и ресурсы", а это не одно и то же. Файлы в архиве #73 требовалось запустить и вот они уже бы и создали ехе с нулевым количеством секций. Если об этом не было сказано прямо, то там прилагались сорцы
    2reverser
    Приаттаченные файлы в Сам себе Iczelion (#73, #78, #79) и Выключалка для компа на 97 байт by Ivan2k2
     
  17. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    EvilsInterrupt
    Отсутствие таблицы экспорта (или нулевой размер директории экспорта) вообще-то никак не влияет на результат LoadLibraryA, т.к. загрузчик вообще никак с экспортом не работает - ему на него просто пофиг :)) Результат GetProcAddress у тебя возвращает указатель на форвард строку "ntdll.RtlXXXXX", потому что зануление размера директории экспорта убило весь механизм форвардинга - тебе про это УЖЕ говорил diamond в #10.
     
  18. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Mikl___
    Спасибо!
     
  19. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.787
    La_plaza
    FASM позволяет давать секциям любые имена, например в аттаче название кодовой секции ".plaza" и ничего, работает нормально;)