實驗: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 ...