Имеем
Вопрос, какие есть вариант получения размера func способами С (на асм не считается)Code:void main (void) { func(); } void func (void) { тут много букв и кода }
Имеем
Вопрос, какие есть вариант получения размера func способами С (на асм не считается)Code:void main (void) { func(); } void func (void) { тут много букв и кода }
Last edited by root; 04-02-2014 at 15:41.
Зависит от компилятора, но функции должны идти последовательно.
Отключи оптимизацию и добавь еще одну функцию:
Code:void main (void) { int size = func_end - func; func(); } void func (void) { тут много букв и кода } void func_end(void) { тут много букв }
Last edited by root; 04-02-2014 at 15:43.
Успех – это путь от провала до провала без потери энтузиазма. (В. Черчиль)
Не бойся идти медленно, бойся остановиться. (Китайская пословица)
When you lose fun and start doing things only for the payback, you're dead. (c) TCLH (Phrack 65, Intro)
Более элегантного решения я не знаю. Как вариант подключить дизассемблерный движок.
Успех – это путь от провала до провала без потери энтузиазма. (В. Черчиль)
Не бойся идти медленно, бойся остановиться. (Китайская пословица)
When you lose fun and start doing things only for the payback, you're dead. (c) TCLH (Phrack 65, Intro)
Пример с вычитанием указателей не всегда будет корректный результат давать - выравнивание и все дела... Я бы вынес интересующую ф-цию в отдельный файл, а процесс компиляции построил бы так, чтобы сначала компилировался файл с ф-цией, потом парсер OBJ файла вытаскивает размер этой ф-ции и передает в качестве define остальным компилируемым модулям.
P.S. ну а кто-то может и плагин для компилятора написать(если компилятор поддерживает)
root (05-02-2014)
Выравнивание и все дела не критично, главное чтобы функция работала и размер был наиболее приближен к реальному.Пример с вычитанием указателей не всегда будет корректный результат давать - выравнивание и все дела
Успех – это путь от провала до провала без потери энтузиазма. (В. Черчиль)
Не бойся идти медленно, бойся остановиться. (Китайская пословица)
When you lose fun and start doing things only for the payback, you're dead. (c) TCLH (Phrack 65, Intro)
В большинстве случаев - да, не критично. Зависит от того, как и что использовать. Например, если передавать ф-цию на ассемблере(пошифрованную?) в качестве ключа(или части ключа), а в код встроить "проверку" ключа - на стандартный пролог, например, то важно не зацепить в начале никакие команды выравнивания.
Т.е. надо просто помнить, что команды выравнивания могут присутствовать.
можно использовать emit, потом глядеть на размер по сигнатуре
Dont Learn Hack - Hack To Learn