如何从交叉编译的二进制文件生成程序集?
使用的编译命令是:
arm-none-linux-gnueabi-gcc test.c -o test
如何解压缩二进制test?
我用过:
objdump -d test -m arm
但上面写着:
test: file format elf32-little
objdump: can't use supplied machine arm
有什么帮助吗?
如何在ARM汇编器代码中使用外部定义,如LONG_MIN和LONG_MAX?
假设my_arm.h看起来像这样:
int my_arm(int foo);
假设我有一个my_main.c,如下所示:
...
#include <limits.h>
#include "my_arm.h"
...
int main (int argc, char *argv[])
{
int foo=0;
...
printf("My arm assembler function returns (%d)\n", my_arm(foo));
...
}
m
GNU汇编程序as根据体系结构使用不同的字符来指定单行注释,例如# on x86、; on 29k或@ on ARM。此外,不管平台如何,都支持C风格的注释(/* */)。
对于不同的体系结构,是否有不同的评论风格的技术原因?多行注释的意思是否定的,因为它可以在任何平台上工作-然而,如果对可用于注释的字符没有技术限制,为什么要设计汇编程序在不同的平台上要求不同的注释样式(对于单行注释)?
所以我需要写一个有3个参数的函数,所有的参数都是结构,主文件是用C写的,函数是用ARM汇编的。所以我想问一下如何操作这些结构中的数据?因为所有数据都单独存储在每个寄存器中。
例如:
Struct contains an int and an array
Struct { int a, int b[] }
function(struct a, struct b, struct c)
因此,程序集中的数据存储方式类似于R0=struct a. int a、R1=struct a. int b[0]
我试着把所有东西都推送到堆栈上,但我得到了同样的结果。那么如何操作所有结构中的数组呢?
我键入gcc hello.c,然后会出现以下内容:
gcc: internal compiler error: Illegal instruction (program as)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.6/README.Bugs> for instructions.
hello.c只是:
int main()
{
return 0;
}
我想不出有什么方法可以让它变得更简单!(这里的print
我正在尝试诊断为什么我编写的一个看似很小的C函数会产生一个很大的.text部分。我已经使用arm-elf-size和arm-elf-objdump来隔离目标文件和函数,但我只能让这些工具生成汇编代码,我没有时间进行逆向工程。
我试过使用与arm-elf-objdump -g兼容的gcc开关"-g“,但它一直出现错误"No though information found”,我在谷歌上搜索了一下也没有明确的答案(尽管其他人也有相同的问题)。
有没有其他方法可以生成混合的C/汇编文件,这样我就可以隔离函数中的故障点?谢谢!
我有一个很短的汇编程序,我想为所有受支持的架构保存在一个文件中。一种方法是在C文件中使用内联程序集,但是由于周围没有真正的C代码,我更愿意使用(预处理)汇编程序文件。比如:
.file "zsvjmp.S"
# Here comes the description what this code is supposed to do
.globl zsvjmp_
.text
zsvjmp_:
#if defined (__i386__)
# here comes the i386 specific assembler code
#elif
我有一个问题,我的Cortex-M0是硬故障,所以我试图调试它。我正在尝试打印当硬故障发生时被推到堆栈中的ARM核心寄存器的内容。
以下是我的基本组装代码:
__attribute__((naked)) void HardFaultVector(void) {
asm volatile(
// check LR to see whether the process stack or the main stack was being used at time of exception.
"mov r2, lr\n"
"
我试图在程序集中为arm64(AArch64)编写一个FIQ处理程序。到目前为止,我已经编写了一个IRQ处理程序。我只是想知道我的FIQ处理程序是否应该与我的IRQ看起来不同。
我的FIQ处理程序做了以下工作:
- Push Registers onto stack
- Read GIC Interrupt Ack Register to identify the interrupt no.
- Check if it is not spurious interrupt. If it is spurious branch to end of irq handler.
- branc