ARM偽指令ldr&adr使用 程式碼重定位實現
ARM偽指令LDR&ADR的作用相同,都是講標號所代表的地址賦予暫存器,但是二者的實現機制是不一樣的:
LDR採用絕對地址,ADR採用相對地址。從而也導致其結果可能會不一樣,也因此可以用來搭配使用,實現程式碼的重定位。
先簡單介紹一下,LDR和ADR的使用例子:
adr r0, _start
ldr r1, =_start
_start:
b _start
反彙編後:
格式說明:
連結地址:機器碼指令:彙編指令
0xD0000000: e28f0000 add r0, pc, #0 ; 0x0
0xD0000004: e59f0000 ldr r1, [pc, #0] ; 0x10
0xD0000008: eafffffe b 0xc
0xD000000C: D0000008 andcc r0, r0, ip
執行後,r0=0xD0000008 ; r1=0xD0000008;
如何實現程式碼重定位:
利用LDR和ADR的實現機制的不同,配合連結指令碼,把程式碼的連結地址進行重定位即可實現。
比如:在上例中將程式碼在連結指令碼中將連結地址重定位到(0x80000000),則編譯執行後r0=0xD0000008;r1=0x80000008
相關文章
- ARM裸機全集擴充套件--SRAM內部重定位程式碼示例套件
- Locust 程式碼指令碼實現指令碼
- 使用指令碼重簽名指令碼
- 視訊更新:程式碼分析8之單步除錯ARM64啟動彙編與重定位除錯
- 使用Java實現一個JS指令碼引擎JavaJS指令碼
- Redis使用lua指令碼實現庫存扣減Redis指令碼
- ETL指令碼的實現指令碼
- ORG 偽指令
- python指令碼處理偽靜態注入Python指令碼
- 使用 Fastlane 實現 iOS 跟 Android 自動打包指令碼ASTiOSAndroid指令碼
- iOS逆向 Shell指令碼+指令碼重簽名iOS指令碼
- nginx重啟指令碼Nginx指令碼
- 【Linux】【Shell】主控指令碼實現Linux指令碼
- 幾百行程式碼實現一個指令碼直譯器行程指令碼
- 程式碼 or 指令,淺析ARM架構下的函式的呼叫過程架構函式
- 《css大法》之使用偽元素實現超實用的圖示庫(附原始碼)CSS原始碼
- 3、python指令碼處理偽靜態注入Python指令碼
- 實現指令碼自動部署docker指令碼Docker
- shell指令碼實現DNS正向解析指令碼DNS
- 多程式PHP指令碼實現海量資料轉移總結PHP指令碼
- 使用者評論程式碼實現
- 重定位
- 分享實用監控指令碼:使用Shell檢查程式是否存在指令碼
- 透過Python指令碼支援OC程式碼重構實踐(三):資料項使用模組接入資料通路的適配Python指令碼C程式
- redis+lua指令碼實現介面限流Redis指令碼
- 基於 “typesys” 實現序列指令碼框架指令碼框架
- python實現自動搶課指令碼Python指令碼
- Python tkinter 實現 指令碼工具 GUI模版Python指令碼GUI
- 使用 Upsource 實現程式碼審查 - jetbrains 系列AI
- Jenkins實現持續整合 使用Ant指令碼構建ios專案Jenkins指令碼iOS
- Redis學習筆記(三)使用Lua指令碼實現分散式鎖Redis筆記指令碼分散式
- 小程式端實現文字展示以及標題定位
- Selenium實現元素定位
- 使用Shell指令碼查詢程式對應的程式ID指令碼
- 透過Python指令碼支援OC程式碼重構實踐(二):資料項提供模組接入資料通路的程式碼生成Python指令碼C程式
- 【圖片+程式碼】:GCC 連結過程中的【重定位】過程分析GC
- Rancher系列文章-Rancher v2.6使用指令碼實現匯入叢集指令碼
- 基於node實現Vue打包部署指令碼Vue指令碼
- 教你如何基於python實現指令碼加密Python指令碼加密