首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何强制gcc生成thumb 32位指令?

要强制GCC生成Thumb 32位指令,可以使用以下方法:

在GCC编译命令中添加参数"-mthumb",这将告诉GCC生成Thumb指令集的代码。Thumb指令集是一种精简指令集,可以减小代码大小并提高执行效率。

例如,使用以下命令编译C源文件:

gcc -mthumb -o output_file input_file.c

这将生成一个名为output_file的可执行文件,其中包含使用Thumb指令集编译的input_file.c的代码。

需要注意的是,使用Thumb指令集编译的代码只能在支持Thumb指令集的处理器上运行。因此,在选择使用Thumb指令集之前,需要确保目标处理器支持该指令集。

推荐的腾讯云相关产品:腾讯云服务器(CVM)

腾讯云服务器(CVM)是一种灵活可扩展的云计算服务,提供高性能、可靠稳定的虚拟服务器实例。您可以根据自己的需求选择不同配置的云服务器,并根据实际情况弹性调整资源。

产品介绍链接地址:https://cloud.tencent.com/product/cvm

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

熟悉又陌生的arm 编译器详解(armccarmclang)

这个时候LLVM就出现了,是Chris Lattner在硕士和博士时提出和形成的编译器,不过其是采用GCC的前端进行语义分析,然后LLVM做优化和生成目标代码,可以叫做LLVM-GCC。...–attribute((section(…))) 可以修饰data 和 function,将其放到指定的section,而不是放到默认的section –thumb将该.c文件编译成 thumb指令,...#pragma arm 编译成arm指令 #pragma thumb 编译成thumb指令 #pragam push 保存#pragma 状态 #pragma...详见ARM开发中几个常见的寄存器详解 -apcs=interwork 支持内部thumb与arm 指令相互切换,比如BLX,这个支持thumb指令的地方用处较多, 2、armasm 嵌入式汇编 函数形参列表可以使用变量...,但是函数体必须要用寄存器,函数体都是汇编语言实现 需要汇编语言处理返回指令 __asm return-type function-name(parameter-list) { // ARM/Thumb

2K40
  • 安卓逆向:重温Thumb汇编指令的细节

    主要内容 1.Thumb指令集详解 2.Thumb直接访问的寄存器 3.Thumb指令集组成部分详解 4.Thumb和arm状态切换 5.Thumb的常见应用场景 1.Thumb指令集详解 •ARM处理器支持两种指令集...:ARM指令集和Thumb指令集。...•ARM指令指令长度为32位,Thumb指令指令长度为16位。在16位外部数据总线宽度下,ARM处理器上使用Thumb指令的性能要比使用ARM指令的性能更好。...•存在Thumb指令的意义:兼容数据总线宽度为16位的应用系统。 2.Thumb直接访问的寄存器 ? 3.Thumb指令集组成部分 ? •3.1.Thumb数据处理指令 ?...当Rm 中的最低位Rm[0] 为 1 时,强制程序从ARM 指令状态跳到Thumb 指令状态;当 Rm 中的最低位Rm[0]为0 时,强制程序从Thumb 指令状态跳到ARM 指令状态。

    1.9K74

    编译选项含义

    也就是增加相应的优化编译选项,具体看下面的相应链接; https://www.zhihu.com/question/27090458 -fpic:用于生成位置无关代码。...contex-a8 与上面一样,这个则是针对板子上的CPU选项是contex-a8类型的; -mfloat-abi=softfp 上面的编译选项和-mfloat-abi=hard,这个参数都用来产生硬浮点指令...;硬浮点则是通过浮点运算单元(FPU)来完成,使用实际的硬件浮点运算单元会比软浮点快得多; -mthumb-interwork 这个编译选项则是支持编译出来的汇编语言可以支持ARM和THUMB指令集;...-mno-thumb-interwork 缺省情况下是“-mno-thumb-interwork”,因为指定了“-mthumb-interwork”产生的代码稍微大一些; -Wno-write-strings...gcc是默认没有-fshort-enums这个选项的; -Wundef 当一个没有定义的符号出现在 #if 中时,给出警告。

    2.7K60

    嵌入式裸板开发之中断与异常(一)

    CPU强制跳转到某个地方,在该地方放置跳转指令跳转到其他函数,其他函数来做(6)中的事情。  ...(2)CPU有两种state:ARM STATE下用ARM指令集,每个指令占据4字节。THUMB STATE下用thumb指令集,每个指令2字节。...同样的代码编译成ARM指令集和THUMB指令集占据的字节不同,因此,THUMB指令集更加高效。   (3)在七种模式下,都可以访问到r0到r15寄存器。...例如,在SWI 的情况,无论是在ARM 状态还是Thumb 状态执行SWI,MOVS PC,R14_svc 语句都将返回到下一条指令。    b.复制CPSR 的内容到相应SPSR 中。    ...c.根据异常类型强制将CPSR 模式位设为某一个值。    d. 强制PC 从相关异常向量处取下条指令。通常也会置位中断禁止标志位,以防止不同的难处理的异常嵌套。

    71720

    什么?Arm放弃了自家的汇编语法?改投GNU了?

    .thumb 定义一下代码使用Thumb指令集编译 .section .section expr 定义一个段。...指令: ldr r2,val @ r1 = *val 是arm指令,将标号val地址里的内容给r2 val: .word 0x11223344 (2)如何利用ldr伪指令实现长跳转 ldr...将main.c编译生成main.o,$(TARGETC)会被替换成main 将start.s编译生成start.o,$(TARGET)会被替换成start 4-5也可以用该行1条指令实现 通过ld命令将...来看下,Makefile应该如何写: # CORTEX-A9 PERI DRIVER CODE # VERSION 1.0 # ATHUOR 一口Linux # MODIFY DATE # 2020.11.17...在Linux OS上,为了运行可执行文件,他们是遵循ELF格式的,通常gcc -o test test.c,生成的test文件就是ELF格式的,这样就可以运行了,执行elf文件,则内核会使用加载器来解析

    2.2K30

    Android 渗透测试学习手册 第八章 ARM 利用

    执行模式 ARM 有两种不同的执行模式: ARM 模式:在 ARM 模式下,所有指令的大小为 32 位 Thumb 模式:在 Thumb 模式下,指令大部分为 16 位 执行模式由 CPSR 寄存器中的状态决定...还存在第三模式,即 Thumb-2 模式,它仅仅是 ARM 模式和 Thumb 模式的混合。 我们在本章不会深入了解 ARM 和 Thumb 模式之间的区别,因为它超出了本书的范围。...让我们使用一个简单程序的例子,看看我们如何利用它。 在下面的截图中,我们有一个简单的程序,有三个函数:weak,ShouldNotBeCalled和main。...一旦我们完成程序编写,我们可以使用gcc编译它,如下一个命令所示。 此外,我们将在这里禁用地址空间布局随机化(ASLR),只是为了使场景稍微简单一些。...在下一章中,我们将了解如何编写 Android 渗透测试报告。

    41930

    【嵌入式】基于ARM的嵌入式Linux开发总结

    2、ARM微处理器工作状态:两种指令对应两种状态(通常情况) (1)Thumb状态、ARM状态; (2)32位定长ARM指令,16位定长Thumb指令。...(3)ARM1176支持ARM指令Thumb指令、Jazelle指令,故有三种状态:ARM状态、Thumb状态、Jazelle状态。...3、gcc/arm-linux-gcc用法: ① 基本用法:gcc hello.c;arm-linux-gcc hello.c;输出a.out ② 推荐用法:gcc hello.c -o hello...4、make及Makefile (1)make:工程管理器,利用执行Makefile文件实现工程管理(编译、链接、生成工程镜像、安装、清理、卸载等); (2)make用法:编写Makefile,在终端下执行...(3)Makefile文件编写示例: 一个工程,2个源文件testa.c ,testb.c,一个头文件testb.h,编译器为arm-linux-gcc生成的可执行文件为test,需支持代码优化、打印警告信息

    18.4K21

    ARM架构的一次充电

    CPU构架定义基本指令集,以及操作系统和虚拟机管理器倚赖的例外处理和內存模型。 CPU微构架由定义处理器的设计并涵盖以下内容以决定实作如何满足构架合约:功耗、性能、面积、管道长度及缓存等级。...分解指令过程: 1、指令预读取(决定从内存的哪儿取指令)--perfetch 2、指令读取(从内存系统中读取指令)--fetch 3、指令译码(解读指令,并且生成控制信号) 4、寄存器读取(提供寄存器的值给操作单元...指令集下,某些指令强制要求使用R13存放堆栈指针。...32 指令集就是在在 Armv6 和 Armv7 架构中被我们所熟知的 Thumb 指令集,Armv8 及之后改名为 Thumb32。...1、ARM状态:此时处理器执行32位的字对齐ARM指令,绝大部分工作在此状态。 2、Thumb状态:此时处理器执行16位的半字对齐的Thumb指令

    1K20

    让终端支持播放mp3,移植mp3解码库libmad和madplay到嵌入式linux

    首先是交叉编译zlib-1.2.3.tar.gz 用交叉编译工具编译zlib,并且把库生成到交叉编译环境的库目录下 ....CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar rc RANLIB=arm-linux-gnueabihf-ranlib make make...这步一般不会有啥问题,但是,默认成功的是静态库啊, 虽然配置上是说默认配置生成动态库,但是确实没有。 实际是有的,指定--shared即可。...或者仔细查makefile,把相关的编译语句找出来,我手动调用gcc - shared -fPIC - $(OBJS)生成了.so 这里还需要注意的是,指定好自己的--prifix,因为后续的编译,好多是要依赖这个的.../lib make make install 出现错误: cc1: error: unrecognized command line option “-fforce-mem” 原因是高版本的gcc

    2.6K10

    ARM汇编之加载寄存器

    在使用 16 位 Thumb 指令时,可生成的常数范围要小得多。 可以用一次数据加载来将任何 32 位值加载到寄存器中,但也可以使用其他方式来加载许多常用的常数。...使用此伪指令生成超出 MOV 和 MVN 指令允许范围的常数。...ADR 和 ADRL 直接加载 利用 ADR 指令和 ADRL 伪指令,无需执行数据加载即可生成位于某一范围内的地 址。...用于 ADR 或 ADRL 的标签必须位于同一代码节中 在 Thumb 状态下,16 位 ADR 指令只能生成字对齐的地址。...ARM 代码例程: DCB 指令定义一个或多个存储字节 LDR 和 STR 指令使用后变址寻址来更新其地址寄存器 加载和存储多个寄存器指令 ARM、ThumbThumb-2 指令集包含用于从内存加载和在内存中存储多个寄存器的指令

    1.1K20
    领券