Разрешение проблем
Существуют следующие категории отказа:
В настоящее время декомпилятор ориентирован на производство корректного кода для любой корректной функции. Декомпилятор не должен потерпеть фатальный сбой, неудачу, или произвести неправильный вывод для правильного ввода. Пожалуйста, вышлите сообщение об ошибке, если это случится.
Декомпилятор использует обширный набор внутренних проверок и суждений. Например, он не производит код, который разыменовывает пустой указатель — «void *». С другой стороны, произведенный код, как предполагается, не является компилируемым, и много компиляторов будут жаловаться на это. Это — преднамеренный выбор создания не компилируемого на 100 % вывода, потому что цель состоит не в том, чтобы перекомпилировать код, но проанализировать его.
Декомпилятор использует некоторые конструкции языка C++ в синтезируемом тексте. Их использование ограничено конструкциями, которые не могут быть представлены на Cи (самый известный пример — это передача структур в функции по значению).
Внутренние ошибки
Когда декомпилятор обнаруживает внутреннюю несогласованность, он отображает окно сообщения с кодом ошибки. Он также предлагает Вам выслать базу данных на сервер hex-rays.com:

Действительно трудно (почти невозможно) воспроизвести ошибки без типовой базы данных, так что, пожалуйста, вышлите её на сервер. Для упрощения задачи, декомпилятор сохраняет свое внутреннее состояние в базе данных, которая действительно удобна, если ошибка происходит после нескольких часов декомпиляции.
Невозможно что-нибудь декомпилировать после внутренней ошибки. Пожалуйста, перезагрузите базу данных, или, лучше, перезапустите IDA.
Отказы без нарушения работоспособности
Когда декомпилятор будет терпеть отказ без нарушения работоспособности на функции, он отобразит одно из следующих сообщений. Вообще, нет никакой необходимости в пересылке сообщения об ошибке при отказе кроме того случая, когда Вы видите, что сообщение об ошибке не должно быть отображено.
- can not convert to microcode (рус. не могу преобразовать в микрокод)
- not enough memory (рус. недостаточно памяти)
- invalid basic block (рус. недопустимый базисный блок)
- positive sp value has been found (рус. найдено позитивное значение указателя вершины стека)
- prolog analysis failed (рус. анализ пролога потерпел неудачу)
- switch analysis failed (рус. анализ переключателя потерпел неудачу)
- exception analysis failed (рус. анализ особой ситуации потерпел неудачу)
- stack frame is too big (рус. фрейм стека слишком большой)
- local variable allocation failed (рус. выделение локальной переменной потерпело неудачу)
- 16bit functions are not supported (рус. 16-разрядные функции не поддерживаются)
- call analysis failed (рус. анализ вызова потерпел неудачу)
- function frame is wrong (рус. неверный фрейм функции)
- undefined type (рус. неопределенный тип)
- inconsistent database information (рус. непоследовательная информация базы данных)
Пожалуйста, читайте раздел Разрешение проблем о возможных действиях.
can not convert to microcode (рус. не могу преобразовать в микрокод)
Эта ошибка означает, что декомпилятор не смог транслировать машинную команду по указанному адресу в микрокод. Пожалуйста, проверьте машинную команду и её длину. Если похоже, что это обычная машинная команда, используемая в коде сгенерированном компилятором, и её длина верна, то вышлите сообщение об ошибке.
Сообщение об ошибке самоочевидно. В то время, как она не должна случаться очень часто, она всё ещё может быть замечена при функциях с огромными стеками. Нет никакой необходимости сообщать об этой ошибке. Мы надеемся, что следующая версия будет обрабатывать функции с огромным стеком более эффективно.
Это — самая частая причина отказа декомпилятора. Она означает, что в указанном адресе есть базисный блок, который не заканчивается должным образом. Например, переход из функции, завершение с немашинной командой, или, просто, наличие мусора. Если Вы можете, попытайтесь исправить ситуацию, изменяя границы функции, создавая команды, или играя с хвостами функции. Обычно эта ошибка случается с уродливыми функциями.
Если ошибка случается при вызове, который не возвращает, поможет пометка вызванной функции как «noret». Если вызов является косвенным, поможет, также, добавление ссылки на «noret»-функцию.
Если эта ошибка происходит в базе данных, созданной старой версией IDA, попытайтесь повторно проанализировать программу прежде, чем декомпилировать её. Вообще, чтобы создать базы данных для декомпиляции, лучше использовать IDA 5.1.
К этому отказу также приводят нераспознанные таблицы переходов. Пожалуйста не сообщайте об этом отказе как об ошибке. Мы скоро введём решение для таблиц переходов.
positive sp value has been found (рус. найдено позитивное значение указателя вершины стека)
Указатель вершины стека по указанному адресу выше чем начальный указатель вершины стека. Функции, ведущие себя так странно, не могут быть декомпилированы. Если Вы видите, что значения указателя вершины стека являются неправильными, измените их при помощи команды Alt-K (Edit, Functions, Change stack pointer (рус. Правка, Функции, Изменить указатель вершины стека)) в IDA.
prolog analysis failed (рус. анализ пролога потерпел неудачу)
Анализ пролога функции потерпел неудачу. В настоящее время Вы не можете сделать очень много, но Вы не будете видеть эту ошибку очень часто. Декомпилятор попытается произвести код с командами пролога вместо остановки из-за этого отказа.
switch analysis failed (рус. анализ переключателя потерпел неудачу)
Идиома переключателя (косвенный переход) по указанному адресу не может быть проанализирована. В настоящее время Вы не можете сделать очень много с этой ошибкой, кроме написания дополнения к программе, который бы перехватил функцию is_switch и распознал бы переключатель. Всё же не простая задача.
Если эта ошибка происходит в базе данных, созданной старой версией IDA, попытайтесь удалить бракованную машинную команду и обновить базу. Выполнение этого повторно анализа базы данных могло бы исправить ошибку, потому что IDA 5.1 обрабатывает переключатели намного лучше чем предыдущие версии.
exception analysis failed (рус. анализ особой ситуации потерпел неудачу)
Это сообщение об ошибке не должно появиться, потому что текущая версия успешно декомпилирует любую функцию и игнорирует любые обработчики особых ситуаций и связанный код.
stack frame is too big (рус. фрейм стека слишком большой)
Так как анализ стека требует большого количества памяти, декомпилятор откажется обработать любую функцию со стеком, больше чем 1 МБ. Анализ стека будет переписан в будущем, но мы должны жить пока с этим ограничением.
local variable allocation failed (рус. выделение локальной переменной потерпело неудачу)
Это сообщение об ошибке означает, что декомпилятор не смог выделить локальные переменные с регистрами и расположениями в стеке. Вы можете видеть это сообщение об ошибках чаще, чем это должно случиться (что означает, что декомпилятор мог терпеть неудачу в некоторых довольно очевидных случаях). Если бы случай действительно прост, мы хотели бы услышать об этом. Иначе пожалуйста подождите, пока выделение переменных не будет переписано. Эта ошибка может также произойти в функциях, которые используют вычисления с плавающей запятой. Так как команды с плавающей запятой, в основном, игнорируются, информационные потоки уравнений обрабатываются неправильно, и выделение локальных переменных может потерпеть неудачу.
Обо всём говорит текст сообщения. В то время, как декомпилятор может быть прекрасно настроен для декомпиляции 16-битного кода, это пока не приоритетная задача. Может быть, в будущем, он будет поддерживать 16-битный код.
call analysis failed (рус. анализ вызова потерпел неудачу)
Это — самое болезненное сообщение об ошибках, но оно, также, говорит кое о чём, что Вы можете сделать. Короче говоря, это сообщение означает, что декомпилятор не смог определить соглашение о вызовах и их параметры. Если это — прямой вызов функции без переменного количества аргументов, Вы можете исправить это, определяя тип вызываемой функции: только перейдите к вызываемой функции и нажмите Y, чтобы определить её тип. Для функций с переменным числом параметров это также хорошая идея — определить их тип, но анализ вызова может всё ещё потерпеть неудачу, потому что декомпилятор должен знать фактическое число параметров в вызове. Мы рекомендовали бы начать с проврки указателя вершины стека во всей функции. Избавьтесь от любых неправильных значений указателя вершины стека. Во-вторых, проверьте типы всех вызванных функций. Если тип вызванной функции является неправильным, он может столкнуться с другими вызовами и привести к отказу. Вот маленький пример:
Если f1 будет определена как функция с соглашением о вызове __stdcall, с 3-мя параметрами, и f2 — функция с 1-м параметром, то анализ вызова потерпит неудачу, так как была необходимость в использовании всех 4-х параметров, и только 3 из них помещены в стек.
Если ошибка происходит при косвенном вызове, пожалуйста добавьте таблицу перекрестных ссылок на функции требуемого типа. Декомпилятор будет использовать тип функции, на которую ссылаются.
Если все входные типы и значения указателя вершины стека верны, но декомпилятор всё ещё терпит неудачу, пожалуйста вышлите сообщение об ошибке.
Это — редкое сообщение об ошибках. Оно означает, что что-что неправильно во фрейме функции. Самая вероятная причина состоит в том, что во фрейме отсутствует область адреса возврата, или ему не соответствует дальность функции (far/near).
Эта ошибка может произойти, если сделана ссылка на зарегистрированный тип (typedef), но он неопределё. Наиболее распространённый случай это — когда выгружена библиотека типа (например, vc6win.til). Это делает все ссылки на все определенные в ней типы недействительными.
В настоящее время эта ошибка означает, что информация об участке памяти функции является неверной. Попытайтесь переопределить функцию (удалить и воссоздать).
Разрешение проблем
Когда декомпилятор терпит неудачу, пожалуйста проверьте следующие условия:
- границы функции . Здесь не должно быть никаких » диких » переходов, выходящих из функции в ничто. Функция должна заканчиваться должным образом: машинной командой возвращения или переходом к началу другой функции. Если она заканчивается после вызова невозвратной функции, вызываемая функция должна быть отмечена как non-returning (рус. невозвратная).
- значения указателя вершины стека . Используйте команду Options, General, Stack pointer (рус. Настройка, Общие, Указатель вершины стека), чтобы отобразить их в столбце сразу после адресов в представлении дизассемблированного кода. Если значение указателя вершины стека является неверным в каком-либо месте функции, то декомпиляция может потерпеть неудачу. Чтобы исправить значения указателя вершины стека, используйте команду Edit, Functions, Change stack pointer (рус. Правка, Функции, Изменить указатель вершины стека).
- тип функции . Соглашение о вызовах, количестве и типах их параметров должны быть верными. Если тип функции не будет определён, то декомпилятор попытается вывести его. В некоторых редких случаях это будет терпеть неудачу. Если функция ожидает свой ввод в нестандартных регистрах или возвращает результат в нестандартном регистре, Вы должны будете сообщить об этом декомпилятору. В настоящее время он выдаёт хорошие предположения о нестандартных местах входа, но не может обработать нестандартные места возврата.
- типы вызываемых функций и элементов данных, на которые они ссылаются . Неправильный тип может очень легко нанести ущерб. Используйте вызывающую клавишу F для отображения типа текущего элемента в окне сообщений. Для функций, переместите курсор в её начало и нажмите F. Если тип неверный, измените его командой Edit, Functions, Set function type(рус. Правка, Функции, Установить тип функции) (вызывающая клавиша Y). Эта команда работает не только для функций но, также, и для данных и членов структур.
- Если тип ссылается на неопределенный тип , декомпиляция может потерпеть неудачу.
- используйте базу данных, созданную IDA 5.1 , потому что она анализирует файлы лучше чем её предыдущие версии.
У будущих версий будет больше корректирующих команд, но мы должны понять, в каких командах мы нуждаемся.
Сообщения об ошибках
Чтобы оказаться полезным, сообщение об ошибке должно содержать достаточно информации, чтобы для её воспроизведения. Команда send database (рус. выслать базу данных) — предпочтительный способ отправки сообщения об ошибках, потому что он сохраняет всю соответствующую информацию в базе данных. Некоторые ошибки невозможно воспроизвести без этой команды.
База данных передаётся в сжатой форме, в целях сохранения полосы пропускания. Для передачи используется подключение SSL.
Если Ваша база данных/входной файл является конфиденциальной, и Вы не можете выслать её, попытайтесь найти похожий файл, для иллюстрации проблемы. Спасибо.
Мы обрабатываем Ваши базы данных конфиденциально (как всегда в прошлом).
Источник
Internal error 40343 ida
Готово! Подписка добавлена.
Готово! Подписка удалена.
Извините, вы должны пройти верификацию для завершения этого действия. Нажмите ссылку верификации в своем электронном сообщении. Вы можете повторить отправку через свой профиль.
- Intel Communities
- Product Support Forums
- Server Products
- IDA: internal error: unable to proceed
IDA: internal error: unable to proceed
- Подписка на RSS-канал
- Отметить тему как новую
- Отметить тему как прочитанную
- Выполнить отслеживание данной Тема для текущего пользователя
- Закладка
- Подписаться
- Отключить
- Страница в формате печати
- Отметить как новое
- Закладка
- Подписаться
- Отключить
- Подписка на RSS-канал
- Выделить
- Печать
- Сообщить о недопустимом содержимом
I got new server, and trying to update BIOS on it.. so when I launch CD with IDA, it throws me an alert.
Where can I get it?
And what should I do with that error?
- Отметить как новое
- Закладка
- Подписаться
- Отключить
- Подписка на RSS-канал
- Выделить
- Печать
- Сообщить о недопустимом содержимом
I checked the link you posted for version 5.0.19 and noticed that I had to scroll down to the bottom to accept the License terms before it allows me to download the file.
I also checked our https://downloadcenter.intel.com/default.aspx Intel® Download Center and noticed that we have a newer version for the Intel® Deployment Assistant. I went ahead and tried it on my server and I loaded just fine. The version I tried is https://downloadcenter.intel.com/Detail_Desc.aspx?DwnldID=23137 5.1.13.
Let me know how it goes with this one.
- Отметить как новое
- Закладка
- Подписаться
- Отключить
- Подписка на RSS-канал
- Выделить
- Печать
- Сообщить о недопустимом содержимом
I checked the link you posted for version 5.0.19 and noticed that I had to scroll down to the bottom to accept the License terms before it allows me to download the file.
I also checked our https://downloadcenter.intel.com/default.aspx Intel® Download Center and noticed that we have a newer version for the Intel® Deployment Assistant. I went ahead and tried it on my server and I loaded just fine. The version I tried is https://downloadcenter.intel.com/Detail_Desc.aspx?DwnldID=23137 5.1.13.
Let me know how it goes with this one.
- Отметить как новое
- Закладка
- Подписаться
- Отключить
- Подписка на RSS-канал
- Выделить
- Печать
- Сообщить о недопустимом содержимом
Thank you, David.
I tried to download version 5.1.13, I do accepted the license terms, but that’s what I see:
«The file that you are trying to download has either been moved, renamed or archived.
Источник
The following failure categories exist:
- a crash or access violation
- internal consistency check failure (interr)
- graceful failure to decompile a function
- incorrect output text
- inefficient/unclear/suboptimal output text
The current focus is on producing a correct output for any correct function.
The decompiler should not crash, fail, or produce incorrect output for a valid input.
Please file a bugreport if this happens.
The decompiler has an extensive set of internal checks and assertions.
For example, it does not produce code which dereferences a «void*» pointer.
On the other hand, the produced code is not supposed to be compilable and many
compilers will complain about it. This is a deliberate choice of not making the output
100% compilable because the goal is not to recompile the code but to let humans analyze it faster.
The decompiler uses some C++ constructs in the output text.
Their use is restricted to constructs which cannot be represented in C
(the most notable example is passing structures to functions by value).
Internal errors
When the decompiler detects an internal inconsistency, it displays a message
box with the error code. It also proposes you to send the database to the hex-rays.com
server:
It is really difficult (almost impossible) to reproduce bugs without a sample database,
so please send it to the server. To facilitate things, the decompiler saves its internal state to
the database, which is really handy if the error occurs after hours and hours of decompilation.
It is impossible to decompile anything after an internal error. Please reload the database,
or better, restart IDA.
Graceful failures
When the decompiler gracefully fails on a function, it will display one of the following
messages. In general, there is no need to file a bugreport about a failure except
if you see that the error message should not be displayed.
- cannot convert to microcode
- not enough memory
- invalid basic block
- positive sp value has been found
- prolog analysis failed
- switch analysis failed
- exception analysis failed
- stack frame is too big
- local variable allocation failed
- 16-bit functions are not supported
- call analysis failed
- function frame is wrong
- undefined or illegal type
- inconsistent database information
- wrong basic type sizes in compiler settings
- redecompilation has been required
- could not compute fpu stack states
- max recursion depth reached during lvar allocation
- variables would overlap
- partially initialized variable
- too complex function
- no license available
- only 32-bit functions can be decompiled for the current database
- only 64-bit functions can be decompiled for the current database
- already decompiling a function
- far memory model is supported only for pc
- special segments cannot be decompiled
- too big function
- bad input ranges
- current architecture is not supported
- bad instruction in the delay slot
Please read the Troubleshooting section about the possible actions.
cannot convert to microcode
This error means that the decompiler could not translate
an instruction at the specified address into microcode.
Please check the instruction and its length. If it looks like a regular
instruction used in the compiler generated code and its length is correct,
file a bugreport.
not enough memory
The error message is self-explanatory. While it should not
happen very often, it still can be seen on functions with huge
stacks. No need to report this bug. Hopefully the next version
will handle functions with huge stack more efficiently.Please restart IDA after this error message.
invalid basic block
This error means that at the specified address there is a basic block,
which does not end properly. For example, it jumps out of the
function, ends with a non-instruction, or simply contains garbage.
If you can, try to correct the situation by modifying the function
boundaries, creating instructions, or playing with function tails.
Usually this error happens with malformed functions.If the error happens because of a call, which does not return,
marking the called function as «noret» will help. If the call
is indirect, adding a cross reference to a «noret» function will
help too.If this error occurs on a database created by an old version of IDA,
try to reanalyze the program before decompiling it. In general, it
is better to use the latest version of IDA to create the databases for decompilation.Unrecognized table jumps may lead to this failure too.
positive sp value has been found
The stack pointer at the specified address is higher than the initial
stack pointer. Functions behaving so strangely cannot be decompiled.
If you see that the stack pointer values are incorrect, modify them
with the Alt-K (Edit, Functions, Change stack pointer) command in IDA.
prolog analysis failed
Analysis of the function prolog has failed. Currently there is not much
you can do but you will not see this error very often.
The decompiler will try to produce code with prolog instructions
rather than stopping because of this failure.
switch analysis failed
The switch idiom (an indirect jump) at the specified address could not
be analyzed. You may specify the switch idiom manually using
Edit, Other, Specify switch idiom.If this error occurs on a database created by an old version of IDA,
try to delete the offending instruction and recreate it. Doing so
will reanalyze it and might fix the error because newer versions of IDA handle
switches much better than older versions.
exception analysis failed
This error message should not occur because the current version
will happily decompile any function and just ignore any exception
handlers and related code.
stack frame is too big
Since the stack analysis requires lots of memory, the decompiler
will refuse to handle any function with the unaliased stack bigger than 1 MB.
local variable allocation failed
This error message means that the decompiler could not allocate local
variables with the registers and stack locations. You will see this error
message only if you have enabled HO_IGNORE_OVERLAPS in the
configuration file. If overlapped variables
are allowed in the output, they are displayed in red.Please check the prototypes of all involved functions, including the
current one. Variables types and definitions may cause this error too.Updating the function stack frame and creating correct stack variables
too may help solve the problem.If you got this error after some manipulations with the function type
or variable types, you may reset the information about the current
function (Edit, Other, Reset decompiler information) and start afresh.
16-bit functions are not supported
The message text says it all. While the decompiler itself can be fine tuned to
decompile 16-bit code, this is not a priority.
call analysis failed
This is the most painful error message but it is also something you can
do something about. In short, this message means that the decompiler could
not determine the calling convention and the call parameters. If this is
a direct non-variadic call, you can fix it by specifying the callee
type: just jump to the callee and hit Y to specify the type. For variadic
functions too it is a good idea to specify the type, but the call
analysis could still fail because the decompiler has to find out the actual
number of arguments in the call.
We would recommend to start by checking the stack pointer in the whole function.
Get rid of any incorrect stack pointer values. Second, check the types
of all called functions. If the type of a called function is wrong, it can
interfere with other calls and lead to a failure. Here is a small example:push eax
push edx
push eax
call f1
call f2If f1 is defined as a __stdcall function of 3 arguments, and f2 is a function
of 1 argument, the call analysis will fail because we need in total 4 arguments
and only 3 arguments are pushed onto the stack.If the error occurs on an indirect call, please
specify the operand type
of the call instruction. Also,
adding an xref to
a function of the desired type from the call instruction will work.
The decompiler will use the type of the referenced function.If all input types are correct and the stack pointer values are correct
but the decompiler still fails, please file a bugreport.
function frame is wrong
This is a rare error message. It means that something is wrong with the
function stack frame. The most probable cause is that the return address
area is missing in the frame or the function farness (far/near) does not
match it.
undefined or illegal type
This error can occur if a reference to a named type (a typedef) is made but
the type is undefined. The most common case is when a type library (like vc6win.til)
is unloaded. This may invalidate all references to all types defined in it.This error also occurs when a type definition is illegal or incorrect.
To fix an undefined ordinal type, open the local types windows (Shift-F1)
and redefine the missing type.
inconsistent database information
Currently this error means that the function chunk information is incorrect.
Try to redefine (delete and recreate) the function.
wrong basic type sizes in compiler settings
Some basic type sizes are incorrect. The decompiler requires that
- sizeof(int) == 4
- sizeof(enum) == 4
Please check the type sizes in the Options, Compiler dialog box and
modify them if they are incorrect.Also ensure that the correct memory model is selected: «near data, near code».
Finally, the pointer size must be:
- for 32-bit applications use «near 32bit, far 48bit»
- for 64-bit applications use «64bit».
redecompilation has been required
This is an internal error code and should not be visible to the end user.
If it still gets displayed, please file a bugreport.
could not compute fpu stack states
The decompiler failed to trace the FPU stack pointer. Please check
the called function types, this is the only thing available for the moment.
We will introduce workarounds and corrective commands in the future.
For more information about floating point support, please follow
link.
max recursion depth reached during lvar allocation
Please file a bugreport, normally this error message should not be displayed.
variables would overlap
This is a variant of the variable allocation failure error.
You will see this error message only if you have enabled
HO_IGNORE_OVERLAPS in the configuration file.
If overlapped variables are allowed in the output, they are displayed in red.
partially initialized variable
A partially initialized variable has been detected. Wrong stack trace
can induce this error, please check the stack pointer.
too complex function
The function is too big or too complex. Unfortunately there is nothing
the user can do to avoid this error.
no license available
IDA could not locate your decompiler license.
only 32-bit functions can be decompiled for the current database
This error message will not currently be displayed.
only 64-bit functions can be decompiled for the current database
IDA64 can currently decompile only 64-bit functions. To decompile
32-bit functions please use IDA32.
already decompiling a function
An attempt to decompile a function while decompiling another function
has been detected. Currently only one function can be decompiled at once.
far memory model is supported only for pc
Please check the data and code memory models in the Options, Compiler dialog.
If necessary, reset them to ‘near’ models.
special segments cannot be decompiled
The current function belongs to a special segment (e.g. «extern» segment).
Such segments do not contain any real code, they contain just pointers
to imported functions. The function body is located in some other
dynamic library. Therefore, there is nothing that we could
decompile.
too big function
The current function is bigger than the maximal permitted size.
The maximal permitted size is specified by the MAX_FUNCSIZE
configuration parameter.
bad input ranges
The specified input ranges are wrong. The range vector cannot be empty.
The first entry must point to an instruction. Ranges may not overlap.
Ranges may not start or end in the middle of an item.
current architecture is not supported
The current processor bitness, endianness, or ABI settings in the
compiler options are not acceptable. See the current ABI limitations
here.
bad instruction in the delay slot
Branches and jumps are not allowed in a delay slot. Such
instructions signal an exception and cannot be decompiled.
Troubleshooting
When the decompiler fails, please check the following things:
- the function boundaries. There should not be any wild branches jumping
out of function to nowhere. The function should end properly, with a
return instruction or a jump to the beginning of another function.
If it ends after a call to a non-returning function, the callee must
be marked as a non-returning function. - the stack pointer values. Use the Options, General, Stack pointer command
to display them in a column just after the addresses in the disassembly view.
If the stack pointer value is incorrect at any location of the function,
the decompilation may fail. To correct the stack pointer values, use
the Edit, Functions, Change stack pointer command. - the stack variables. Open the stack frame window
with the Edit, Functions, Stack variables… command and verify that the
definitions make sense. In some cases creating a big array or a structure variable
may help. - the function type. The calling convention, the numbers and the types of the arguments
must be correct. If the function type is not specified, the decompiler will
try to deduce it. In some rare cases, it will fail.
If the function expects its input in non-standard
registers or returns the result in a non-standard register, you will have
to inform the decompiler about it. Currently it makes a good guess about the
non-standard input locations but cannot handle non-standard return locations. - the types of the called functions and referenced data items. A wrong
type can wreak havoc very easily. Use the F hotkey to display the
type of the current item in the message window. For functions, position
the cursor on the beginning and hit F. If the type is incorrect, modify
it with Edit, Functions, Set function type (the hotkey is Y).
This command works not only for functions but also for data and
structure members. - If a type refers to an undefined type, the decompilation might fail.
- use a database created by the latest version of IDA.
In some cases the output may contain variables in red. It means that local variable
allocation has failed. Please read the page about overlapped
variables for the possible corrective methods.
The future versions will have more corrective commands but we have to understand
what commands we need.
Bugreports
To be useful, the bugreport must contain enough information to reproduce the bug.
The send database command is the preferred way of sending bugreports
because it saves all relevant information to the database. Some bugs are
impossible to reproduce without this command.
The database is sent in the compressed form to save the bandwidth. An SSL connection is used for the transfer.
If your database/input file is confidential and you cannot send it, try to find a similar file
to illustrate the problem. Thank you.
We handle your databases confidentially (as always in the past).
Дизассемблирование прошивок — ChipTuner Forum

Чип-тюнинг коммерческой техники Кама3, ГАЗ от SMS-Soft
| Argutin Motors: VAG Bosch MEDC17 | Прошивки Magneti Marelli VAG от Art-Pro | Прошивки Peugeot/Citroen от Art-Pro | Прошивки Renault от А.Юрлова |
Дизассемблирование прошивок
Страница 1 из 12
-

offline
разнорабочий
- Регистрация:
- 25.09.2015
- Сообщений:
- 908
- Адрес:
- Усть-Каменогорск
Кто изучает с помощью IDA Pro прошивки для процессоров TriCore?
Интересует, есть ли поддержка в более свежих(я использую 5.5) версиях дизассемблера,
в модуле «tricore.w32» загрузка имен регистров и названий области памяти, в общем работа с файлом конфигурации «tricore.cfg»? -

offline
Программист/реверсер
- Регистрация:
- 02.06.2002
- Сообщений:
- 17,918
- Адрес:
- Ярославль разработчик SMS-Soft
bidipro, ну если мы выпускам модули, то вероятно, как-то изучаем

Все делается ручками, пишутся скрипты. Иначе никак.
Версии новее 5.5 лучше работают с TriCore, подробности увидите сами.PS: цель изучения какая? Если есть полезные идеи, мы всегда готовы к сотрудничеству.
Последний раз редактировалось almi; 24.11.2015 в 16:41. -

offline
разнорабочий
- Регистрация:
- 25.09.2015
- Сообщений:
- 908
- Адрес:
- Усть-Каменогорск
ну есть еще вариант модуль IDA доработать, чем я сейчас и занимаюсь, конфиг научил его читать.
вариант со скриптами тоже неплох, но исходники модуля гибче в использовании.
значит поищу новее версию, для анализа модуля
во многих современных автомобилях применяются трикоры, а необходимого инструмента по ним нет.
-

offline
Диагностика
- Регистрация:
- 11.12.2014
- Сообщений:
- 119
- Адрес:
- Москва
-

offline
инженер
- Регистрация:
- 28.10.2016
- Сообщений:
- 1
- Адрес:
- Самара
Открываю прошивку от соляриса, IDA падает с ошибкой Wrong DBG_RESMOD_STEP_… bits. Удаляю Ваш плагин — открывается норм. Может исходники где лежат, я б посмотрел что ему не любо?
-

offline
разнорабочий
- Регистрация:
- 25.09.2015
- Сообщений:
- 908
- Адрес:
- Усть-Каменогорск
возможно версия плагина не совпадает с версией IDA, исходники в сеть не выкладывал.
вот последняя
Вложения:
-

offline
разнорабочий
- Регистрация:
- 25.09.2015
- Сообщений:
- 908
- Адрес:
- Усть-Каменогорск
-

offline
разнорабочий
- Регистрация:
- 25.09.2015
- Сообщений:
- 908
- Адрес:
- Усть-Каменогорск
Конечно. Инструкций много, нужно было попроще процессор выбрать для начала.
-

offline
Программист/реверсер
- Регистрация:
- 02.06.2002
- Сообщений:
- 17,918
- Адрес:
- Ярославль разработчик SMS-Soft
Как накопаете что-то полезное, милости просим. В смысле, мы всегда готовы к взаимовыгодному сотрудничеству.
-

offline
ChipTuner.RU
- Регистрация:
- 17.01.2001
- Сообщений:
- 22,251
- Адрес:
- Волгоград
Да! Нужно объединять усилия и вкладываться в раскрученный проект для получения максимальной выгоды для всех.
-

offline
разнорабочий
- Регистрация:
- 25.09.2015
- Сообщений:
- 908
- Адрес:
- Усть-Каменогорск
на лицензе модуль запускается?
-

offline
разнорабочий
- Регистрация:
- 25.09.2015
- Сообщений:
- 908
- Адрес:
- Усть-Каменогорск
tricore_dbg 004 for IDA6.8
первая попытка реализовать Continue process. -

offline
разнорабочий
- Регистрация:
- 25.09.2015
- Сообщений:
- 908
- Адрес:
- Усть-Каменогорск
столкнулся с командой которую IDA отображает как «nor16 d0, #0«, хотя по коду 46 00 — это «not16 d0«, интересно где баг в даташите или в IDA?
-

offline
Инженер-Радио механик,Диагност
- Регистрация:
- 21.10.2012
- Сообщений:
- 1,352
- Адрес:
- Россия,Екатеринбург
У тебя на предыдущей картинке 46 стоит в старших битах а 00 в младших
в даташите наоборот 46 в младших а 00 в старших.а посмотри в даташите команду NOR какие там значения в байтах?
-

offline
разнорабочий
- Регистрация:
- 25.09.2015
- Сообщений:
- 908
- Адрес:
- Усть-Каменогорск
это нормальное явление
там совсем другие значения, я склонен думать что баг в IDA(tricore.w32)
-

offline
Инженер-Радио механик,Диагност
- Регистрация:
- 21.10.2012
- Сообщений:
- 1,352
- Адрес:
- Россия,Екатеринбург
похоже на то. а вручную разве нельзя заменить команду nor на not?
-

offline
разнорабочий
- Регистрация:
- 25.09.2015
- Сообщений:
- 908
- Адрес:
- Усть-Каменогорск
править файл tricore.w32 или каждый раз при встрече команды помнить этот баг можно, каждый раз править вручную — больно.
в общем то нашел выход, поправил свой исходник, там ведь как раз переименовываются инструкции по даташиту, в движке отладчика добавил команду как NOT, в IDA точно баг, т.к. NOR бывают двух видов и обе 32-х битные.
Добавлено через 1 час 45 минут
в более старых даташитах нашел объяснение:
Note : The 32-bit equivalent of the NOT instruction is a NOR with a constant of zero.
оказывается что не баг, а псевдоним команды.Последний раз редактировалось bidipro; 22.02.2018 в 02:05.Причина: Добавлено сообщение
-

offline
программист микроконтроллеров
- Регистрация:
- 02.04.2018
- Сообщений:
- 1
- Адрес:
- Литва, Каунас
Попробовал модуль застрял на 5 строке:
«EQ(0x5C) instruction code 0x3A unknown:
3A1F «EQ D15, D15, D1 ; Equal:«CMOVN(0x44) instruction code 0xEA unknown»
EA12 «CMOVN D2, D15, #1 ; Conditional Move-Not (16-bit)»Можно надеется на обновление модуля ?
-

offline
разнорабочий
- Регистрация:
- 25.09.2015
- Сообщений:
- 908
- Адрес:
- Усть-Каменогорск
-

offline
разнорабочий
- Регистрация:
- 25.09.2015
- Сообщений:
- 908
- Адрес:
- Усть-Каменогорск
подскажите, кто знает, бесплатный компилятор с ассемблера для tricore, если он существует.
-

offline
элетрик
- Регистрация:
- 03.06.2017
- Сообщений:
- 2
- Адрес:
- Пушкино Моск.обл.
Качаем Эклипс для трикора, с ифинеоновского сайта, он бесплатный, с ним устанавливается toolchain, где куча утилит командной строки, среди них есть и ассемблер, и также есть tsim, симулятор трикоров, тоже командной строки… Так же можно попробовать ассемблер в Эклипс засунуть, тоже мож чего ни будь получиться…
Последний раз редактировалось ksmm; 19.06.2018 в 00:42.Причина: добавил
-

offline
элетрик
- Регистрация:
- 03.06.2017
- Сообщений:
- 2
- Адрес:
- Пушкино Моск.обл.
Застрял:
ST.H(0x14F) instruction code 0xA8 unknown
PFLASHMIRROR:A001894C ST.H [A15]0x18, D15
Страница 1 из 12