arm相关内容
我想编写 c 程序(如 backtrace) 我正在获取函数的地址,但我不知道如何将这些地址转换为符号(函数名).请帮帮我 解决方案 第一个答案是符号处理是隐藏的内部 ABI.一些操作系统甚至在内核空间中执行这种魔法.但是你显然想要 ARM + linux. 首先需要的信息是将地址映射回其来源.您可以从此处检索此映射:/proc/self/stat 下一部分更棘手,将这些文件中
..
我正在尝试使用 C 为 Nucleo-64 Stm32F401re 板编写裸机闪烁程序.然而,在开始调试错误时(它还没有闪烁),我发现了一个奇怪的地址,我没有找到任何解释.这是反汇编相关部分的输出: blink.elf:文件格式elf32-littlearm部分.text的反汇编:08000000 :8000000: 20018000 andcs r8, r
..
例如,virt-what 显示您是否在硬件虚拟化“沙盒"中运行. 如何检测你是否在 ARM "TrustZone" 沙箱中运行? 解决方案 TrustZone 可能与您的想法不同.有一个连续的模式.从“受信任函数的简单 API"到在每个世界运行的“双操作系统". 如果为这个问题提供更多背景信息,那将会很有帮助.这是为了以编程方式确定还是出于逆向工程考虑?对于当前的 Linux
..
我正在尝试了解 ARM 程序集中函数的开始和结束: 推 {R0-R2, LR}POP {R0-R2,PC} 在 IDA 中查看这段代码是我所理解的(假设 SP 为 0x100): PUSH R0 ;sp = 0xFC推 R1 ;sp = 0xF8推 R2 ;sp = 0xF4推 LR ;sp = 0xF0弹出 R0 ;sp = 0xF4弹出 R1 ;sp = 0xF8流行音乐 R2 ;sp
..
我想知道是否可以在 ARM 平台上更改正在运行的应用程序中途执行的字节序.正如你们中的一些人所知,ARM 是双端的(支持大端和小端),我想知道在 Android(或一般的 linux)上是否可以设置单个应用程序以在执行时使用不同的端序,或者如果可以在执行过程中更改处理器字节序. 阻止对此的一些可能的反应.更改字节顺序(如果可能在应用程序级别)几乎肯定是一个坏主意,但我正在为 ARM 平台构建
..
我有一个奇怪的.我正在使用供应商的头文件开发嵌入式系统.我正在使用 GCC 4.6.3 编译文件.我想在我的代码中使用 C++,我有错误我无法弄清楚.我正在运行一个供应商示例程序,我所做的只是将 main.c 文件的名称更改为 main.cpp.因此,我假设 C++ 编译器正在解释头文件.其中之一包含以下几行: __attribute__((naked)) 静态 return_type 签名 \
..
在编写依赖于 CPU 架构的软件时,例如在 x86 上运行的 C 代码或在 ARM cpus 上运行的 C 代码.通常有两种方法可以编译此代码,或者交叉编译到 ARM CPU 架构(例如,如果您正在 x86 系统上开发),或者将您的代码复制到本机架构 cpu 系统并天真地编译. 我想知道本机方法与交叉编译方法相比是否有好处?我注意到 Fedora ARM 团队正在使用一个由慢速/低功耗 AR
..
我的问题是关于我在 ARM CORTEX M 启动文件中找到的一些流行但没有详细记录的代码,例如 这个STM32. “模式"是: .size X,.-X ,其中 X 是符号或标签. 我找到了这个答案并了解.size指令和 dot 特殊符号 工作,但仍然完整的行似乎对我没有任何作用..-X 操作的结果不会存储在任何地方. 谁能解释一下这条线的作用? 解决方案 即放在函数
..
我有一个 32 位浮点 f 数(已知为正数),我需要将其转换为 32 位无符号整数.它的大小可能太大而无法容纳.此外,下游计算需要一些空间.我可以将最大可接受值 m 计算为 32 位整数.如果 f (
..
我想将函数指针重新解释为 void* 变量.函数指针的类型将是 Class* (*)(void*). 下面是示例代码, 类测试{诠释一个;};主函数(){测试* *p(void **a);void *f=reinterpret_cast(p);} 以上代码适用于 Visual Studio/x86 编译器.但是使用ARM编译器,它会产生编译错误.不知道为什么. 错误:
..
我正在尝试升级到 yagarto4.7.2(另一个 GNU ARM 工具链,对于那些想知道的人),这是为 Windows 移植的 gcc 和 binutils.但是,尝试编译一个简单的 Hello World 会产生: c:/yagarto-20121222/bin/../lib/gcc/arm-none-eabi/4.7.2/../../../../arm-none-eabi/bin/ld.e
..
我在 ARM9 板上运行嵌入式应用程序,总闪存大小仅为 180MB.我可以运行 gdb,但是当我运行时 (gdb) 生成核心转储 我收到一个错误 警告:corefile 部分的内存读取失败,1048576 字节位于 0x4156c000.警告:corefile 部分的内存读取失败,0x50c00000 处的 1048576 字节.保存的 corefile core.5546程序正在运
..
是否有人(这里)知道 Windows 8 是否会有一种胖 exe,可以用 Visual Studio 2012 编译,ARM 和 x86 机器都支持?我猜不是,因为据我所知,您无法创建将执行 32 位或 64 位代码的胖二进制文件(据我所知,唯一可用的解决方案是 32 位,它可以即时创建 64 位可执行文件). 微软扩展 exe 或为 Windows 8 及更高版本创建胖二进制格式似乎会有所
..
我正在从事一个二进制分析项目,我正在构建一个将程序集转换为 llvm 的升降机.我建立了一个内存模型,但对 str 和 ldr arm 汇编指令如何在内存上工作有点困惑.所以我的问题是.例如,给定一个内存地址 0000b8f0,我想在其中存储一个 64 位十进制值 20000000.str 指令是将整个 20000000 存储在地址 0000b8f0 中还是将其划分为字节并将第一个字节存储在 00
..
我是嵌入式 Linux 开发的新手.我必须将 uboot 和自定义 Linux 发行版移植到新的基于 ARM 的板上. 我们使用的uboot(2009.08)没有Arch和DTS文件夹.我想这是一个旧版本,它不使用 DTS 将硬件信息传递给内核(v 3.0).我已经阅读了很多关于 DTS 的信息,但是关于将硬件信息从 uboot 传递到我们正在使用的内核的这种(过时的?)方法,互联网上没有足
..
这是什么意思:我只有 12 位用于立即常数,所以我可以只表示从 0 到 2^12 = 4096 的立即常数吗?操作数 2 如果是寄存器,可以有 32 位,但为什么立即数只有 12 位呢?这个数字是从哪里来的? 解决方案 由指令集定义.例如.MOV 指令编码为 31 28 |27 26 |25 |24 23 22 21 20 |19 16 |15 12 |11 0 |条件 |0 0 |我
..
我必须从 Linux 2.6.38 将我的设备置于非常低功耗模式,因此,有必要暂停所有组件,包括 CPU 和 DDR2. 到目前为止,我发现我必须将核心汇编函数复制到处理器的内部存储器中并从那里执行它.基本上,它看起来像这样: cpaddr = iram_alloc(SZ_1K, &iram_addr);如果(!cpaddr)返回-ENOMEM;suspend_iram_base = __
..
我有一个程序(arm)和一些指令(IDA 拒绝): .plt:000083F0 ADRL R12, 0x83F8.plt:000083F8 LDR PC,[R12,#(off_90D8 - 0x83F8)]!;sub_83D0 地址0x90D8存储0x83D0: 000090D8 D0 83 00 00 所以,在 ldr 之后,pc 是 0x83D0 并且会执行 0x83D0 中的 ins
..
我正在尝试在我的汇编代码中混合使用 ARM 和 THUMB 指令.例如,在下面的代码中,我尝试使用这两种模式: .thumb @ .code 16.section __TEXT,__text.globl mySymbol1我的符号1:…….arm @ .code 32.section __TEXT,__text.globl mySymbol2我的符号2:... 现在,根据我的理解,当我将此代码
..
问题 我想在 Linux Android 设备上使用内联汇编在 ARM 中执行退出系统调用,并且我希望从内存中的某个位置读取退出值. 示例 如果不提供这个额外的参数,调用的宏如下所示: #define ASM_EXIT() __asm__("mov %r0, #1\n\t"\“mov %r7, #1\n\t"\“swi #0") 这很好用.为了接受一个论点,我将其调整为:
..