导航:首页 > 源码编译 > 反编译libstm32

反编译libstm32

发布时间:2022-10-20 20:21:58

‘壹’ 谁能帮我把一个hex文件反编译为c语言文件

文件有两种,一种是文本文件,一种是程序二进制文件,不管哪种文件都可以用十六进制编码来显示,称为hex文件。


1、文本Hex文件一般不需要转成C语言,更多的是程序二进制文件,用十六进制显示,可以转换成C语言,一般使用相应的反汇编程序来实现,这方面的工具很多,不同的平台略有不同。Windows平台一般常用的OllyDbg、Windbg、IDA,linux平台使用最多的是GDB和Linux版的IDA。


OllyDbg,简称OD,一般是软件逆向工程爱好者,最先使用的一个工具,但是因为当下不在更新,所以一般用一般用于学习使用,下图中左上角的区域即为反汇编区域 ,用户可以根据汇编指令,分析程序算法,然后自己编写代码。

通过这个实例 ,相信应该能理解一个大致的流程啦。

‘贰’ 怎么在ubuntu下开发stm32

环境:

ubuntu 13.10

stm32f103zet6

一、STM 32 GCC 安装

stm32 属于arm cortex-m系列thumb指令集,所以给arm用的arm-none-eabi就可以了,首先是下载

下载地址:

https://launchpad.net/gcc-arm-embedded/+download

下载其中的gcc-arm-none-eabi-version-linux.tar.bz2

解压到目录会产生gcc-arm-none-eabi的文件夹

把该编译器添加到用户的环境中:

‘叁’ Building libstm32.a ... ./bin/sh: 1: : not found

makefile里面的路径是对的吗

建议在给库创建安装目录的时候给目录777权限,然后make就好,不要sudo make

‘肆’ keil MDK做stm32的uc/os系统时候出现错误如下所示,一定采纳!stm32f10x_adc.c这个文件是什么文件作用

这个是你在STM32库的预编译头文件stm32f10x_conf.h里面打开了很多头文件,但是你又没有把那些文件添加进工程来导致的,你进stm32f10x_conf.h里面把不需要打开的头文件,也就是不用到的头文件屏蔽掉,如屏蔽掉#define _ADC,这样就可以了,也可以把stm32f10x_adc.c添加进工程里来,不过建议你在stm32f10x_conf.h里把不需要的都屏蔽掉比较好

‘伍’ stm32 的工程中加有一个STM32F10xR.LIB 的文件 在keil里也打不开 然后在文件夹里双击 使用dxp打开的

STM32F10xR.LIB是库文件,假如你要使用STM32F10x的库函数就必须加进去,如果不适用就不必加了

‘陆’ STM32编译出错

error: #137: expression must be a modifiable lvalue
描述:表达式必须是一个可以修改的左值
主要出现在这种现象
:a=NUM;
NUM是一个数值或表达式
,a为一个变量
但a被定义为像const这种不可更改的类型导致NUM不能赋值给变量
解决方法要么放弃赋值要么修改变量属性

‘柒’ #include "STM32Lib\\stm32f10x.h" LIB后的两个斜杠是啥意思

\ 是c转义字符,\\代表一个反斜线字符''\',即stm32f10x.h是目录STM32Lib下的文件。

‘捌’ 如何将stm32标准库封装成lib

以前一直使用STM32的标准库,需要一步步地将代码加进去,将编译选项设置好,然后再编译整个工程。

这个编译过程是一个相当慢的过程!完全编译大约需要一支烟的时间。每次建立工程都这么编译,是一个相当浪费时间和香烟的过程。

于是,我有了将库编译成lib文件的想法。本博文就是我将STM32F4的标准库编译成lib文件并在工程中使用的过程。

适用对象:

1、熟悉库,不想再看库里边代码

2、有稳定的库,库文件更新不频繁

3、库文件多,每次编译时间长

下面是我将STM32F4的标准库编译成lib并在工程中使用的过程:

使用工具链:MDK4.70A。其实各个工具链几乎是一样的

1、建立创建lib的工程

2、将库文件拷贝到工程目录:

将库里边目录\STM32F4xx_StdPeriph_lib v1.0.2\STM32F4xx_StdPeriph_Driver下的inc和src两个文件夹拷贝到预创建工程的目录。

我计划在目录E:\学习\ARM\库\stm32f4-2中创建库。于是我将两个文件夹拷贝到了这里。

3、选择芯片:STM32F407VG

4、选择NO。因为这不是可运行的程序,这里不需要加入启动文件。

5、创建完工程后,工程结构如图:

6、MDK中点击工具栏上的设置工程结构,并将库文件加入工程:

为了通用,我将库中所有的C文件都加入了工程

7、完成后MDK下的目录结构:

8、MDK下设置输出选项:

工程选项中设置输出,选择输出lib到目录E:\学习\ARM\库\stm32f4-2\lib\:

9、设置C语言预编译宏和引用目录:

因为要使用STM32F4标准库,预编译选项设置:USE_STDPERIPH_DRIVER,STM32F4XX

将刚才拷贝的inc和工程根目录文件夹加入引用:

10、设置完成后:

11、将stm32f4xx_conf.h文件拷贝到工程:

这个文件需要在标准库提供的示例工程中找:

我使用的是\STM32F4-Discovery_FW_V1.1.0\Project\Peripheral_Examples\ADC3_DMA\stm32f4xx_conf.h

这个文件引用了库文件中所有的头文件。因为不包含在库中,我将这个文件拷贝到E:\学习\ARM\库\stm32f4-2文件夹。

12、到此,工程设置完成。按F7编译,经过一支烟的时间即可生成库的lib。

生成完成后,MDK工程中:

13、工程输出目录:

文件stm32f4lib.lib就是我们生成的lib文件

14、将库文件加入该工程

15、新建工程,我命名成stm32f4use,处理器依旧选择STM32F407VG。

16、这是选择yes,因为这是一个可执行的工程:

17、将标准库示例工程的\STM32F4-Discovery_FW_V1.1.0\Project\Peripheral_Examples\ADC3_DMA中的system_stm32f4xx.c拷贝到工程目录(E:\学习\ARM\库\stm32f4-2)中

18、再次点击菜单上的设置工程目录结构,将刚才生成的lib库加入到工程中:

19、将示例工程\STM32F4-Discovery_FW_V1.1.0\Project\Peripheral_Examples\ADC3_DMA中的system_stm32f4xx.c拷贝到工程目录。

20、将main.c和 system_stm32f4xx.c 加入到工程

21、完成后的目录结构:

22、加入编译选项

与上边生成lib相似,预编译选项设置:USE_STDPERIPH_DRIVER,STM32F4XX

引用目录:.\inc;..\stm32f4-2 (这里的.\inc;..文件夹就是刚才建立库时候的文件夹)

输出可执行文件:

23、添加几行简单的代码

//点亮一个LED
#include <stm32f4xx.h>
#include "stm32f4xx_conf.h"
#include "stm32f4xx_tim.h"

int main()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOD,&GPIO_InitStructure);
GPIO_SetBits(GPIOD,GPIO_Pin_12);

while(1);
}

24、工程设置完成,按F7试试。现在编译速度快起来了,点个烟的时间就编译完了

‘玖’ 关于汇编语言的翻译,将下面的ASM码反编译为C语言,谢谢

r1=r0>>0x1f
r1=r0+(r1<<0x24)
r1=r1>>8
r1=r0-(r1<<8)
不对随便写写

‘拾’ 我在ubuntu系统中编译stm32的库出现的问题

strict-aliasing 大多数时候影响不大 不需要修改

所以最简单的就是把这个编译选项去掉就可以了
搜一下你的makefile设置
如果不是显示的加了 -Werror=strict-aliasing

那就是开了-O2了

阅读全文

与反编译libstm32相关的资料

热点内容
自己购买云主服务器推荐 浏览:422
个人所得税java 浏览:761
多余的服务器滑道还有什么用 浏览:192
pdf劈开合并 浏览:28
不能修改的pdf 浏览:752
同城公众源码 浏览:489
一个服务器2个端口怎么映射 浏览:298
java字符串ascii码 浏览:79
台湾云服务器怎么租服务器 浏览:475
旅游手机网站源码 浏览:332
android关联表 浏览:946
安卓导航无声音怎么维修 浏览:333
app怎么装视频 浏览:431
安卓系统下的软件怎么移到桌面 浏览:96
windows拷贝到linux 浏览:772
mdr软件解压和别人不一样 浏览:904
单片机串行通信有什么好处 浏览:340
游戏开发程序员书籍 浏览:860
pdf中图片修改 浏览:288
汇编编译后 浏览:491