本帖最后由 yjmwxwx 于 2015-12-13 16:47 编辑
为什么研究反汇编因为我技术不行写不出程序,真佩服那些能自己些程序的。
研究了一下反汇编发现原来反汇编分析起来也不容易啊,要分清对应哪个库函数也不容易
拿原子哥的程序研究研究
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "adc.h"
//ALIENTEK Mini STM32开发板范例代码15
//ADC实验
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司
int main(void)
{
u16 adcx;
float temp;
delay_init(); //延时函数初始化
uart_init(9600); //串口初始化为9600
LED_Init(); //初始化与LED连接的硬件接口
LCD_Init();
Adc_Init(); //ADC初始化
POINT_COLOR=RED;//设置字体为红色
LCD_ShowString(60,50,200,16,16,"Mini STM32");
LCD_ShowString(60,70,200,16,16,"ADC TEST");
LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(60,110,200,16,16,"2014/3/9");
//显示提示信息
POINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowString(60,130,200,16,16,"ADC_CH0_VAL:");
LCD_ShowString(60,150,200,16,16,"ADC_CH0_VOL:0.000V");
while(1)
{
adcx=Get_Adc_Average(ADC_Channel_1,10);
LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,150,temp,3,16,0X80);
LED0=!LED0;
delay_ms(250);
}
}
打开IDA
选择HEX文件
选ARM
参数设置
从复位向量进去
.s启动文件的跳转main的指令,他并不是直接跳转main而是要把堆栈清零,还把后面一下数据放在了内存里
繁琐的初始化不管他们直接找mian
挑转到main
终于到了main函数
按F5转C
流程图
IDA反出来的程序
void __fastcall __noreturn sub_80001D4(int a1, int a2)
{
int v2; // r0@1
unsigned int v3; // r4@2
unsigned int v4; // r0@2
int v5; // r1@2
int v6; // r0@2
int v7; // r1@2
int v8; // r0@2
int v9; // r1@2
int v10; // r9@2
int v11; // r1@2
unsigned int v12; // r4@2
unsigned int v13; // r0@2
int v14; // r0@2
int v15; // r0@2
int v16; // r1@2
int v17; // r0@2
sub_8005F68(a1, a2);
sub_800605A(9600);
sub_8000584();
v2 = sub_8001E4E();
sub_8005E80(v2);
v20000014 = -2048;
sub_8005E00(60, 50, 200, 16);
sub_8005E00(60, 70, 200, 16);
sub_8005E00(60, 90, 200, 16);
sub_8005E00(60, 110, 200, 16);
v20000014 = 31;
sub_8005E00(60, 130, 200, 16);
sub_8005E00(60, 150, 200, 16);
while ( 1 )
{
v3 = sub_8005F32(1, 10);
sub_8005D42(156, 130, v3, 4);
v4 = sub_8007804(v3);
v6 = sub_80076A8(v4, v5);
v8 = sub_80074AC(v6, v7);
v10 = sub_8007448(v8, v9);
v12 = (unsigned __int16)sub_80077C4(v10, v11);
sub_8005D42(156, 150, v12, 1);
v13 = sub_8007804(v12);
v14 = sub_80079C4(v13, v10);
v15 = sub_800782C(v14, 1148846080);
v17 = sub_80077C4(v15, v16);
sub_8005D42(172, 150, v17, 3);
v422101A0 = v422101A0 == 0;
sub_8005FE2(250);
}
}
|
|