本帖最后由 polang22 于 2024-7-23 08:41 编辑
本次介绍一下如何在Windows平台下使用arm-linux-gnueabihf-gcc交叉编译生成arm汇编的可执行文件.
这里使用的编译器是arm-linux-gnueabihf-gcc,下载地址在
https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/arm-linux-gnueabihf/
可以根据需要自行选择版本
下载完成后,将/bin目录添加到环境变量,然后就可以使用了
这里随便写一个程序举例
[C++] 纯文本查看 复制代码 #include<stdio.h>
int main()
{
int x = 0x12345678;
printf("%x",x);
printf("Hello world\n");
return 0;
}
输入命令
[Asm] 纯文本查看 复制代码 arm-linux-gnueabihf-gcc hello.c -o hello -static
这里的链接方式是静态链接,所以生成的文件比较大,不知道为什么,如果不使用静态链接,生成的文件是无法执行的,就算只链接libc这样的库也无法执行
把生成的hello文件放到IDA里查看,发现生成的汇编是thumb模式下的
如果要生成arm模式下的汇编,需要在编译时添加-marm选项
这样生成的就是arm模式下的汇编
接下来把生成的可执行文件放到真机里运行,看一下效果
执行的命令为
[Asm] 纯文本查看 复制代码 arm-linux-gnueabihf-gcc hello.c -o hello -static -marm
adb push E:\arm\hello /data/local/tmp
adb shell "chmod 777 /data/local/tmp/hello"
adb shell "/data/local/tmp/hello"
这里我把这里四条命令写成了.bat文件,直接执行
执行成功
|