在 x86 64平台下 除錯 arm 的使用者態程式

2021-10-08 06:26:41 字數 2487 閱讀 6153

實驗:arm 使用者態程式是本地交叉編譯出來的,如果是別的程式直接拷貝過來,可能會有相容性問題;

file hello

hello: elf 32-bit lsb executable, arm, eabi5 version 1 (sysv), dynamically linked, interpreter /lib/ld-linux.so.3, for gnu/linux 3.2.0, buildid[sha1]=dcfe92f8af30811bd3ca027195f43c75ca910a48, not stripped

需要安裝以下程式

sudo apt-get install qemu

sudo apt-get install gdb-multiarch

在本地用qemu啟動 使用者態程式

$ qemu-arm -g 1234 -l /usr/arm-linux-gnueabi -cpu cortex-a7  ./hello
-g port指定除錯埠

在另外乙個shell中用gdb-multiarch去除錯它

$ gdb-multiarch

gnu gdb (ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-git

license gplv3+: gnu gpl version 3 or later this is free software: you are free to change and redistribute it.

there is no warranty, to the extent permitted by law. type "show copying"

and "show warranty" for details.

this gdb was configured as "x86_64-linux-gnu".

type "show configuration" for configuration details.

for bug reporting instructions, please see:

.find the gdb manual and other documentation resources online at:

.for help, type "help".

type "apropos word" to search for commands related to "word".

pwndbg: loaded 189 commands. type pwndbg [filter] for a list.

pwndbg: created $rebase, $ida gdb functions (can be used with print/break)

pwndbg> target remote:1234

target remote:1234就是連線前面監聽的埠

可以開始除錯了

0xff7bdc70    ldr    sl, [pc, #0x94]

► 0xff7bdc74 ldr r4, [pc, #0x94]

0xff7bdc78 mov r0, sp

0xff7bdc7c bl #0xff7be3ac

0xff7bdc80 add r6, pc, #0x84

0xff7bdc84 add sl, sl, r6

0xff7bdc88 ldr r4, [sl, r4]

0xff7bdc8c mov r6, r0

0xff7bdc90 ldr r1, [sp]

0xff7bdc94 add r2, sp, #4

0xff7bdc98 cmp r4, #0

下面這個就是進入到 main 函式的彙編了

► 0x1055c    push   

0x10560 add fp, sp, #4

0x10564 sub sp, sp, #8

0x10568 ldr r3, [pc, #0x88]

0x1056c ldr r3, [r3]

0x10570 str r3, [fp, #-8]

0x10574 ldr r3, [pc, #0x80]

0x10578 str r3, [fp, #-0xc]

0x1057c ldr r3, [fp, #-0xc]

0x10580 ldr r3, [r3, #-8]

0x10584 ldr r2, [pc, #0x74]

在x86 64平台上編譯龍芯平台go執行環境

系統 deepin v20 平台 x86 64 交叉編譯器 mips loongson gcc7.3 2019.06 29 linux gnu,即gcc 7.3.1。待後續更正 wget交叉編譯化境搭建見在x86 64平台上搭建龍芯mips64交叉編譯環境 安裝git sudo apt instal...

在x86 64機器上構建arm64映象

有幾種辦法可以打包出arm64的映象 直接在arm機器上執行編譯和打包 通過qemu模擬arm環境 利用docker提供的buildx 需要啟用試驗性特性 我沒有arm的機器 所以我主要試了一下下面兩種方式。借助qemu user static映象打包 文件 qemu user static doc...

如何查詢x86 64平台上的核心堆疊位置

current巨集在linux 核心中負責獲取當前cpu上的task struct,通常是借助thread info和核心棧實現 我們需要先找到對應的核心棧,核心棧的棧底位置就是thread info結構體 對於x86 64bit平台來說 declare per cpu unsigned long ...