[an error occurred while processing this directive] [an error occurred while processing this directive]
Ответ: не так давно дизасемблировал программу
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Сергей Тюнькин 17 ноября 2001 г. 17:27
В ответ на: Keil C51: определение типа переменной по виду сгенеренного кода.. как? отправлено Glut 16 ноября 2001 г. 16:27

размером в 64кБ, как оказалось она написана на ICC8051. Слава богу что в этом пакете можно было извлечь библиотечные функции. Сопоставив с кодом можно было как минимум на 50-80%(от к-ва переменных) определить типы переменных. В остальных ситуациях как правило помогали библиотечные функции например ?L_NOT_LO1 и ?F_CMP_L_02
например:


MOV R0,#1;
CLR A
MOV R1,A
MOV R2,A
MOV R3,A
MOV R4,A
MOV R5,A
MOV R6,A
MOV R7,A
MOV A,#07H
CALL F_CMP_L002
JNZ L38D4
-------
где в A передается признак операции и имеет следующее значение:
операция signed unsigned
< #0AH #OBH
<= #0EH #OFH
== #0DH #ODH
!= #05H #O5H
> #06H #O7H
>= #02H #O3H
отсюда
if ((unsigned long)R0..R3 > (unsigned long)R4..R7)
if(1>0)

и т.д. Часто встечались ну совсем непонятные конструкции и приходилось писать, писать и писать свои процедуры и сопоставлять с исходным кодом, и так шаг за шагом, результат - программа восстановлена с точностью до бита.

Что я могу посоветовать Вам, в этом деле, напишите свои процедуры, начиная с простых


(char)с = 123;
(int)i = 123;
(float)f = 123.0;
f=c+i;
a>0?-i:i;

и т.п. Анализируйте полученный код, и если программа на Keil по Win? то здесь все делается гораздо быстрее.
Желаю удачи!

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru