大佬硬生生从 dll 里面提取出了 JLink 固件

鱼鹰谈单片机 2021-08-19 21:55

老读者应该知道,鱼鹰在实验室一直使用自制的 STlink,这次鱼鹰想制作 J-LINK,然后找到了这么一篇文章,大家可以学习一下。

(有时间可以给大家提供 ST-link、J-link 固件,这些在网上基本都能找到)

来源 :https://www.jianshu.com/p/0cd3a513f1b1


我做的板子,在保证功能完整的情况下,一般都会尽量做小。于是就 2.54mm 排针,或者标准的 JTAG 的体积我都不能忍。。不管什么芯片,我都会上 RT-Thread, RTT 的 finsh 调试非常好用,但是必须要有串口。

所以,大概是在大二做飞控的时候,我定义了一个 8-pin 的 FPC 来做专用的调试,里面包含了 SWD 和 UART。并且 SWD 是带 SWO 的。


image

这么多年来,我只做了一个调试器,用的 USB HUB 芯片,把 Jlink OB 和 CP2102 整合在一块板子上。

板子错误挺多的,最严重的是 CP2102 芯片整个是用飞线飞过去的。。


image

就这么不稳定地过了好多年,在知道 STM32F072 的 Jlink OB 同时支持了虚拟 UART 之后,就决定还是要做一个新的。

新旧对比。板子很快就做好了。


image

有了硬件,开始愁固件了。

这位大神(http://akb77.com/g/stm32/jlink-ob/),从JlinkARM.dll 里面硬生生把 STM32F072 的Jlink OB 固件给拔出来了。

牛不牛掰!

可惜他的帖子里面提供的文件,是从5.12版本的 JlinkARM.dll,里面拔出来的,现在最新的到了至少 6.20, 我的 keil 里面是 6.10j,每次链接都会提示固件升级,神烦。

而且在我的板子上,出现了点击取消升级后,板子掉线的情况。

拿 JlinkARM.dll 开刀

于是我打算自己尝试把固件拔出来。方法跟他的一样,从 JlinkARM.dll 下手。

他本人已经在帖子里面回复了最新的 6.10n 这个版本的 JlinkARM.dll 的固件位置

Can't say about 610i but for 610n start from 0x8C8054 and length 0x0B66C

不过我没找到这个版本的 JlinkARM.dll。我打算拿自己 keil 带的 6.10j 的dll来尝试定位 STM32 的固件位置。

开始挖坑

需要的工具是 WinHex

首先我尝试打开从他博客下载的固件,我的设想是,在我的 JlinkARM.dll 里面找看看,有没有一样的至少前面几个字节。比如这几个,0x38 1C 00 20


image

结果并没有。我又试试找了其他的字段,并没有什么线索。

我反思了一下,既然固件是有可能变化的,那我还是尝试一下在博客主用的 5.12j 的 JlinkARM.dll 里面先定位一下固件。

于是我把 5.12j 下了下来,打开后果然定位到了固件的位置。这个版本的固件,是 38 1C 开头的。


image

但是要怎么在其他版本的 JlinkARM.dll 里面定位呢?依旧用我手上的 6.10j 版本的 JlinkARM.dll 试一下。我注意到了固件之前,也就是 38 1C 之前的这几个字节。先不管他们有什么意义,先在 6.10j 里面搜搜试试。


image

哈哈哈,果然给我找到了,难道固件就是后面  4A 25 00 EA 开头的么?现在还不好确定。先假设这里就是开始位置,那么长度是多少?

于是我又回到 5.12j 里面,参考一下原博,找找是否有长度信息。

原博对 5.12j 版本的描述

  1. Extract binary part from JLinkARM.dll (from JLink_V512)
    For example from offset 7153340 (0x6D26BC) and size 41192 (0x0A0E8).
    Use any binary extraction tool as you prefer.

现在有两个思路,

  1. 找到 5.12 里面的 0x0A0E8,看看这个长度信息的位置有什么线索。

  2. 找到固件的结尾,看看是否是一个固定的特殊格式

打住!以上是错误的。上面那个图,仔细看的话,就会发现,右边的描述里面,写着,这个固件是给 SAM7 用的,而不是STM32!!!而且,博主并不是用 5.12j 的 JlinkARM.dll 开刀的!偏移地址根本不对。慢慢的坑。

填坑

虽然上面找到的代码,并不合适 STM32F072,但是!我找到了线索和规律,

线索就是,直接搜索单片机的型号!
规律就是,不同芯片的固件,是连续放置的!

先看线索,在博主提供的 5.12 版本里面提取的固件中,有这样一个规律。


image

单片机相关的描述之前,有一些 64个字节的 FF 和 16个字节的 00,这些明显是保留的块,具体用来干嘛的我不懂,我也不想理。然后之前是 12 * 16 个字节的数据,我印象中,这个地方应该是放置了中断跳转的函数指针,具体不确定。

但是,他们的长度是固定的,也就是说,找到单片机的描述,再往前推一定数量的字节,就是固件开始地方!

具体是多少个字节呢,17行 * 16 = 0x1FA 个 (506个)。

好了,那我们就去其他版本的 JlinkARM.dll 里面搜,这里以我手上的 6.10j 版本为例。

image

很轻松就找到了关于 STM32F072的描述,然后根据 保留的 FF 和 00, 往前推 12 行, 看到一个“60 1D 00 20” 开头的字段。看到的第一眼,我就很肯定这就是固件的开头了!

因为这个跟博主提供的 5.12 版本的固件太像了 “30 1C 00 20”。最后两个字节一模一样。“30” 和 “60” 在二进制上,只移位了1位,然后 1D 就很简单的是 1C+1.

找到开头了,可喜可贺,那么固件的长度是多少呢?找不到固件的长度,裁剪不出来,有个毛用?

然而,我不需要知道固件的长度。因为固件的存放,是连续的,这是我在浏览上下文发现的一个规律。我只需要知道下一个固件什么时候开始,然后大概裁剪一下就好了。原则是只能多裁剪,不能少裁剪。

有人会担心,如果多余的字节被裁剪进去了,会不会影响程序,答案是否定的。为啥自己去考虑考虑。

于是我开始寻找下一个固件开始的位置,怎么找?直接用手翻。也就 40+k 的固件大小,翻几十页就好了。鼠标点几下还是很快的。

image

嘿嘿,下一个居然是 STM32F103 的 Jlink OB 固件。

到这里其实可以结束了,想省事,直接裁剪到那堆 FFFF 里面随意位置就好,因为显然这个地方已经是另一个固件开始的地方了。符合“只多裁,不少裁”的原则。当然我是按 32bit 对齐裁剪的。新建一个文件,把固件开始位置,到结束位置复制过去,然后保存为 .bin 就可以了。

下载,测试,bingo!固件显示已经是 2017年5月的固件,比我的 jlink 驱动还新。这回不会再提示更新固件了吧


image

但是如果我想知道固件准确的结束位置,怎么办

再挖一个坑

仔细看了一下 F103 的固件,保留的 FF 区域的大小,跟 F072 固件完全不同,那我就很难确定了。当然,F103 的 Jlink OB 固件满天飞,去网站上下一个,用相同的方法查看 F103 固件的偏移量,就大概能知道是什么地方开始的了。但是,知道开始的位置并没有什么用,虽然 JlinkARM.dll 里面固件看起来是连续存放的,但是固件之间可能会有一些其他的描述符。如果想去除这些,必须找到真正的固件结束位置。

然后我就继续往上翻了。滚了几个滚轮之后,马上看到了熟悉的 pattern。一大堆 "0xFE 0xE7"

image

对比一下 5.12 JlinkARM.dll 提取的固件结尾:

image

非常相似,所以呢,大概就是这个地方了。

然而并不是这样。。。反正这个地方失败了

image

保存,测试,失败。

坑不填了

就这么先用着吧。

因为固件不完美,最新的 Jlink OB STM32F072 的 bin 文件 (来自 6.20e) 就不放了,如果有需求清留言。

看完以上,需要的人应该已经能自己定位固件的位置自己提取最新版本的固件了。
ST 的 DFU 软件也是各种各样的坑,祝好。

关于固件自动升级的问题

答案是:不能
以上固件在单片机的 flash 中,是从 0x8004800 开始的,从 0x8000000 开始,是 bootloader。

问题在于,博客里面提供的 bootloader 并不是 jlink 写的 bootloader。博客里面能下载的bootloader,我查看了一下,非常短。我推断它只提供了很简单的跳转到 0x8004800 的功能。

这就导致了 Jlink 的驱动,无法升级固件。没授权下拿到 Jlink 提供的 bootloader 的可能性极小。

鱼鹰谈单片机 面向软件开发进阶读者,分享包括但不限于 C 语言、KEIL、STM32、51 等知识!
评论 (0)
  • 近年来,越来越多的企业在5S管理的基础上,开始追求6S、7S甚至8S管理,仿佛S越多,管理就越先进,企业就越优秀。于是,6S增加了“安全”,7S又加上了“节约”,8S甚至引入了“学习”……看似更加全面,实则很多企业只是机械地增加S,却忽略了管理的核心目标:提升效率、降低浪费、优化工作环境。优思学院认为,5S本身已经是一套成熟的精益管理工具,它的核心理念不仅简单高效,而且易于实施和推广。如果企业只是为了赶时髦,盲目增加S,而没有真正理解5S的本质,那么这些额外的“S”很可能会变成管理上的负担,而不
    优思学院 2025-03-07 12:43 206浏览
  • ​CS6212是一款可分别用于USB Type-C主机/显示端口源应用的带重定时的有源开关。这设备符合USB 3.2标准版本1.0和USB Type-C标准上的VESA DisplayPort Alt模式 1.0版,支持通过GPIO或12C进行灵活的模式切换。此设备支持USB 3.2第2x1代 运行速度高达10Gbps,DisplayPort 1.4运行速度高达HBR3 8.1Gbps。CS6212管脚分布及功能定义:CS6212支持重定时器训练,并支持USB 3.2标准中定义的状态状态机(RT
    QQ1540182856 2025-03-07 10:09 163浏览
  • 深圳触觉智能RK3506开发板现已上市,开启预售!搭载瑞芯微RK3506B/J超低功耗工业处理器(1.5GHz三核A7+M0,主频1.5GHz);支持1280×1280显示、双百兆网口、星闪无线三模,板载高达2路CAN FD与5路串口。RK3506适用场景简介工业控制‌:RK3506适用于工业控制、工业通信、人机交互等应用场景。其多核异构架构(3xCortex-A7+Cortex-M0)和外设接口丰富,支持Buildroot、Yocto系统,适合轻量级HMI应用‌。‌工业通信‌:RK3506均支
    Industio_触觉智能 2025-03-07 10:04 136浏览
  • 一、系统概述MYD-LD25X搭载的Debian系统包含以太网、WIFI/BT、USB、RS485、RS232、CAN、AUDIO、HDMI显示和摄像头等功能,同时也集成了XFCE轻量化桌面、VNC远程操控、SWITCH网络交换和TSN时间敏感网络功能,为工业设备赋予“超强算力+实时响应+极简运维”的体验!类别名称描述源码TF-AArm Trusted Firmware 2.8OP-TEEOP-TEE 3.19BootloaderU-boot 2022.10KernelLinux Ke
    米尔电子嵌入式 2025-03-07 14:08 244浏览
  • 服务器应用环境与客户需求PCIe 5.0高速接口技术的成熟驱动着生成式AI与高效能运算等相关应用蓬勃发展。在随着企业对服务器性能的要求日益严苛,服务器更新换代的周期也持续加快。在此背景下,白牌与DIY(Do It Yourself)服务器市场迎来了新的发展契机,但同时也面临着更趋复杂的技术挑战。传统上,白牌与DIY服务器以其高度客制化与成本效益优势受到市场青睐。然而,随着PCIe 5.0等高速技术的导入,服务器系统的复杂度大幅提升,对组装技术与组件兼容性也就提出更高的要求。举个简单的例子来说,P
    百佳泰测试实验室 2025-03-06 17:00 165浏览
  • 多人同时共享相同无线网络,以下场景是否是您熟悉的日常?姐姐:「妈~我在房间在线上课,影音一直断断续续的怎么上课啊!」奶奶:「媳妇啊~我在在线追剧,影片一直卡卡的,实在让人生气!」除此之外,同时间有老公在跟客户开在线会议,还有弟弟在玩在线游戏,而妈妈自己其实也在客厅追剧,同时间加总起来,共有五个人同时使用这个网络!我们不论是在家里、咖啡厅、餐厅、商场或是公司,都会面临到周遭充斥着非常多的无线路由器(AP),若同时间每位使用者透过手机、平板或是笔电连接到相同的一个网络,可想而知网络上的壅塞及相互干扰
    百佳泰测试实验室 2025-03-06 16:50 162浏览
  • 深圳触觉智能SOM3506核心板现已上市,搭载瑞芯微RK3506B/J超低功耗处理器(1.5GHz三核A7+M0),低功耗满载仅0.7W,支持40℃~85℃工作环境,即日起宽温级59元/工业级68元,特价开售!芯片介绍RK3506是瑞芯微Rockchip在2024年第四季度全新推出的Arm嵌入式芯片平台,三核Cortex-A7+单核Cortex-M0多核异构设计,CPU频率达1.5Ghz, M0 MCU为200Mhz。RK3506适用场景简介工业控制‌:RK3506适用于工业控制、工业通信、人机
    Industio_触觉智能 2025-03-07 10:03 162浏览
  •        深夜的公园里,当路灯熄灭后,传统监控摄像头只能拍出模糊的黑白画面,仿佛老式胶片电影里的场景。而搭载为旌瑶光ISP的摄像头,却能像猫科动物一样,在几乎全黑的环境中捕捉到行人衣服的颜色、树叶的纹理,甚至快速跑动的宠物狗毛发细节。这种从“黑白默片”到“全彩4K电影”的跨越,背后是为旌瑶光ISP对传统红外补光技术的颠覆性创新。一、传统方案之困:被红外光“绑架”的夜视世界        传统安防摄像头依赖红外
    中科领创 2025-03-07 16:50 323浏览
  • Sub-GHz,即工作频段低于1GHz的无线通信技术,常见频段有315MHz、433MHz、868MHz与915MHz等。其可借助无线电波在自由空间传播的特性,把数据调制到射频载波上进行传输,达成物联网设备间的无线通信,是物联网设备实现高效、稳定、无缝交互的“通信基石”。典型射频信号(无线电波)收发电路简示在工业自动化、智慧城市、智慧农业与智能家居等物联网领域中,LoRa、Wi-SUN、Z-Wave、Sigfox等工业级通信协议大多运行在Sub-GHz频段。而正是通过Sub-GHz射频技术,传感
    华普微HOPERF 2025-03-07 11:39 165浏览
  • 在企业管理和职场环境中,权力是一个常被提及却又让人感到微妙的话题。有人觉得它充满吸引力,有人却对它避之不及。然而,不管你对权力的态度如何,理解它、掌握它,甚至善用它,都是职场成功的重要一环。今天,我们就来深入探讨权力的本质,特别是个人权力和社会权力的区别,以及如何在职场中逐步建立属于自己的影响力。权力的两种面貌:你掌控自己,还是掌控他人?说到权力,首先要区分它的两种类型。个人权力是你对自己生活的掌控感。比如,你能自由决定自己的职业方向,不用总是请示他人。这种权力让人感到踏实和满足,是我们在生活中
    优思学院 2025-03-07 15:56 209浏览
  • 文/Leon编辑/cc孙聪颖2025年全国两会进行时,作为“十四五”规划收官之年,本届两会释放出坚定目标、稳中求进、以进促稳等信号。其中,企业家们的建议备受关注,关系到民营经济在2025年的走向。作为国内科技制造业的“老兵”,全国人大代表、TCL集团创始人及董事长李东生在本届两会中提出三份代表建议,包括《关于优化中国科技制造业融资环境的建议》、《关于加强AI深度伪造欺诈管理的建议》和《关于降低灵活就业人员社会保险参保门槛的建议》,表现出对科技制造、AI发展和劳动者保障方面的关注。会后,李东生接受
    华尔街科技眼 2025-03-06 19:41 143浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦