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 程式碼指令碼實現指令碼
- Android使用程式碼實現關機/重啟Android
- 使用指令碼重簽名指令碼
- 視訊更新:程式碼分析8之單步除錯ARM64啟動彙編與重定位除錯
- javascript實現網頁平滑定位程式碼例項JavaScript網頁
- shell 指令碼實現的守護程式指令碼
- [ARM] ARM彙編指令
- jQuery實現的錨點平滑定位程式碼例項jQuery
- 使用Java實現一個JS指令碼引擎JavaJS指令碼
- ORG 偽指令
- __EMIT偽指令MIT
- Redis使用lua指令碼實現庫存扣減Redis指令碼
- 使用shell指令碼實現LANMP一鍵安裝指令碼
- ETL指令碼的實現指令碼
- nginx重啟指令碼Nginx指令碼
- redis重啟指令碼Redis指令碼
- Nginx 重啟指令碼Nginx指令碼
- iOS逆向 Shell指令碼+指令碼重簽名iOS指令碼
- 《css大法》之使用偽元素實現超實用的圖示庫(附原始碼)CSS原始碼
- 指令碼實現檢視錶空間使用情況指令碼
- 【Shell】使用Shell指令碼快速完成SQL指令碼中重複枯燥的任務指令碼SQL
- coreseek實戰(四):php介面的使用,完善php指令碼程式碼PHP指令碼
- 指令碼div實現拖放功能指令碼
- 批次kill session實現指令碼Session指令碼
- 使用程式碼實現Autolayout的方法
- Windows監控並重啟某個程式指令碼Windows指令碼
- python指令碼處理偽靜態注入Python指令碼
- 幾百行程式碼實現一個指令碼直譯器行程指令碼
- 程式碼 or 指令,淺析ARM架構下的函式的呼叫過程架構函式
- 使用 Fastlane 實現 iOS 跟 Android 自動打包指令碼ASTiOSAndroid指令碼
- 使用HttpModule實現URL重寫HTTP
- 使用者評論程式碼實現
- 實現指令碼自動部署docker指令碼Docker
- 【Linux】【Shell】主控指令碼實現Linux指令碼
- shell指令碼實現DNS正向解析指令碼DNS
- iOS專案開發實戰——使用CoreLocation實現定位iOS