аааа Нельзя править сообщение! С олли не работал. У меня свой проект, исходники под рукой, VS тоже, зачем мне олли?
cupuyc Обычно достаточно RVA адресов возврата. Но можно прикрутить отладочные символы(если свой кодес).
Clerk ну есть, напрмер, табличка 0x00352356 0x00236452 0x00436234 0x00345623 0x00562345 0x00345243 0x00401023 0x00401000 как этим адресам сопоставить имена функций? выискивать ручками в иде?
cupuyc Никак не сопоставлять. В большинстве случаев функция не определена по имени, её определяет именно положение в модуле, это внутренние не экспортируемые функции. Если есть в экспорте, тогда вручную.
Никто не говорит, что "достаточно вставить эту функцию в код и все ошибки сами собой будут находиться". Это только подспорье человеку разумному, в некоторых случаях очень помогает. Сейчас мой ответ таков: отладочной информации на машине клиента нет, поэтому в логе (созданном на стороне клиента) имен функций, файлов и номеров строк указано быть не может (если явно не добавили в код отладочную информацию). Получив лог придется искать в IDE руками. Можете предложить что-то лучше? Дамп не предлагать, Velheart уже озвучил. )
Clerk а если я не знаю имена функций - как информация об одних только адресах поможет мне в отлоадке?
MikhailKM как правило, программы пишутся с двумя конфигурациями: релиз и дебаг. вот дебаг версия содержин отладочную информацию, которую и стоит логировать. и как-раз таки дебаг версию ты шлёшь заказчику. а релиз он получает после оплаты.
cupuyc Эта инфа будет являться основой для дальнейшего анализа. Видимо вы отладчиком никогда не пользовались.
cupuyc ?? у вас такие добрые заказчики? не только не дебаг, но еще и защищенную. просто, чтоб спать крепче. MikhailKM если речь о мсвс, то, возможно, стоит взглянуть в сторону ключей /Gh (Calls hook function _penter) и /GH (Calls hook function _pexit) связать имена с адресами можно по мап-файлу. чтоб не перепутать сборки, его можно прилагать в зашифрованном виде
Great Видимо так и надо сделать, функция с большими возможностями, работает и на x64, и с другими процессами и т.д. Хотя (имхо) для моей задачи StackWalk64 делает ровно то же, что и мой код. qqwe Как я понимаю, эти ключи следует использовать только в отладочных версиях, их применение ведет к увеличению кода и замедлению работы программы. Имхо, не годится. В map хранится адрес первой инструкции в функции, а нужно интерпретировать адрес возврата.
в том-то и дело, что я знаю что такое отлаживать прогу в 10 мб под олькой. да ещё когда на одной тачке повторяется, а на другой нет. ++ не понял. почему не дебаг? я имею ввиду что дебаг версия может спокойно логировать имена функций стека вызовов, н-р при исключительной ситуации или просто для проверки, логировать аргументы функций и пр. что при анализе ошибок будет значительно эффективнее, чем одни лишь адреса.
если в коде ~ тысячи функций. стек вызово состоит из неск. десятков вызовов. положим, что где-то в середине этого стека был передан неверный аргумент, который был неверно вычислен при вызове другой функции. вопрос: как адреса функций стека вызово помогут локализовать ошибку (найти хотя бы функцию в которой передаётся неверный аргумент)? ответ: никак. нужна хотя бы печать списка значений аргументов. а чтобы не потратить добрые пол часа на поиск соответствия "адрес-имя функции", хотелось бы чтобы в лог печатался не только адрес, но ещё и имя.
Пролог у функций разный делай на сишном инлайнасме и делай себе таблицу. Как тут Clerk заметил - реально:
MikhailKM ? если у вас не отладка, то зачем вам лог? запись на диск медленнее басика (память и длинные переходы в дллю тоже не самая быстрая штука). кроме того, где вы там усмотрели настолько заметное увеличение/замедление? ась? оптимизаторы, бывает, превращают функци/классы в такую кашу, что только точка входа сохраняет частичную инди. вот к ней можно и привязаться. тем более, что предоставляются автоматные методы
что за извращение? разве речь идёт о малваре? у меня самый обычный проект. я отсылаю его заказчику - у того что-то начинает глючить. мне нужно локализовать проблему. вы же предлагаете столь извращённые методы, что прога превращается в сплошной костыль.