ARM汇编联合C语言
文章目录
GUN arm汇编不能像MASM那样支持类C那样的函数写法. 也不支持结构体, 所以注定了GUN汇编不能像MASM那样写大型的程序, 不能像Windows下面那样, 用MASM来写较大型的程序, 所以用C和汇编联合成了一个妥协的办法. 所以这篇写一点GCC和和GUN汇编联合的问题.
联合的话,我们直接可以使用ndk-build进行编译了, 不用再输入arm-linux-androideabi-as.exe这么长的命令. 另外一个调试也可以使用ida来调试了. 最近ida 6.5 泄露出来了, 可以很方便的调试android的arm汇编代码, 不用再用gdb进行调试了. gdb调试真恶心.
既然用ndk-build来编译, 那么直接复制ndk下面的samples test-libstdc++项目出来就好. 这个项目还是和Java没有半毛钱关系. 编译出来的文件是一个elf文件. 修改test-libstdc++的 Android.mk 加入LOCAL_ARM_MODE := arm 表示使用arm指令, 不要使用thumb指令. 然后修改下模块名称再修改下LOCAL_SRC_FILES源文件的名称. 这里有两个源文件ArmC.c和Assembly.S一个C语言文件和一个汇编文件.
# A simple test for the minimal standard C++ library #
I want ARM, not thumb.
LOCAL_ARM_MODE := arm
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) LOCAL_MODULE := ArmC LOCAL_SRC_FILES := ArmC.c Assembly.S include $(BUILD_EXECUTABLE)
然后C语言是源文件是这样的 ArmC.c
|
|
Assembly.S汇编文件:
|
|
然后使用ndk-build, 然后使用Ida 进行调试. 关于怎么用ida进行android调试的网上也有很多代码. 这边就不展开了. 上图吧
参考链接:
http://www.eggwall.com/2011/09/android-arm-assembly-calling-assembly.html
文章作者 忆杰
上次更新 2014-08-29