eXeL@B —› Основной форум —› gcc -> сгенерить FLIRT сигнатуры |
Посл.ответ | Сообщение |
|
Создано: 12 сентября 2015 07:20 · Поправил: Apokrif · Личное сообщение · #1 Народ, подскажите куда копать. Подбираю ключи компилятора, чтобы сгенерить сигнатуры для LUA. Нашел простую функцию в декомпилируемой либе и пытаюсь получить такую же при компиляции исходников. gfind_nodef.c Code:
gcc-4.4.3 Похоже, что оптимизация полностью отключена (-O0) и есть стек фрэйм (адресация параметров идет через R11) lib.so Code:
У меня (-O0) все почти тоже самое, но НЕТ указателя на стек фрэйм (R11) и адресация параметров идет через SP Code:
Все ключи -fomit-frame-pointer Don't keep the frame pointer in a register for functions that don't need one. This avoids the instructions to save, set up and restore frame pointers; it also makes an extra register available in many functions. Проверил omit-frame-pointer для -O0 -O0 -Q --help=optimizers -fomit-frame-pointer [disabled] Или я неправильно понимаю omit-frame-pointer или что-то еще упускаю... Протрахался день и ночь, куда еще копать? |
|
Создано: 12 сентября 2015 08:44 · Личное сообщение · #2 это у тебя что то с gcc потому что бай дефолт это Code:
Code:
|
|
Создано: 12 сентября 2015 19:16 · Поправил: Apokrif · Личное сообщение · #3 reversecode пишет: это у тебя что то с gcc потому что бай дефолт это Извините, я не понял при чём тут "бай дефолт"? В вашем примере все параметры передаются через регистры, а не через стек. У меня в обоих случаях параметры передаются через стек, но адресуются по-разному, через bp/r11 или sp. В остальном весь код с моих вариантах совпадает. Для функции из вашего примера, в LUA 5.1.4 она: Code:
И gcc4.4.3 БЕЗ оптимизации (-O0) даёт: Code:
Т.е. точно также все параметры передаются через стек, а не через регистры. У вас похоже включена оптимизация (-O) Скомпилите с -frecord-options-in-elf и посмотрите ваши ключи. Или вы что-то другое имели ввиду? Добавлено спустя 1 час 20 минут Уф, вроде разобрался! Android NDK генерит ключи ... -O2 -fomit-frame-pointer ... -O0 ... "-O2 -fomit-frame-pointer" - всегда автоматом, даже в debug mode "-O0" - моё В результате получается -fomit-frame-pointer [enabled] Поменял своё на -O0 -fno-omit-frame-pointer и получил -fomit-frame-pointer [disabled] И код совпал один в один! Модераторы, вряд ли это тема кому интересно, может просто стереть её? |
eXeL@B —› Основной форум —› gcc -> сгенерить FLIRT сигнатуры |