交叉编译是指在一台主机上为另一种不同架构或操作系统的目标平台生成可执行程序或库。在C++中,交叉编译通常用于在开发机器上编译目标平台的程序,例如在使用x86架构的开发机器上编译ARM架构的程序。
1. 准备下载相关的交叉编译器gcc (1)、aarch32架构的交叉编译器 因为系统是ubuntu 14-04的版本,可以直接使用安装的方式去安装aarch32架构的交叉编译器。也可以按照aarch64架构的方式去下载aarch32的交叉编译器,建议g++版本低一点,4.8.4左右。 sudo apt-get install g++-arm-linux-gnueabihf 执行命令成功后,使用 命令 arm-linux-gnueabihf-g++ -v 查看到安装的版本值,安装成功! 版本值显示如下图:
交叉编译器: http://ftp.loongnix.org/loongsonpi/pi_2/toolchain/
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/80639076
交叉编译其实是相对于本地编译(native build)来说的,我相信大家最开始学习 C/C++ 这些语言的时候,都是在电脑上写程序,然后在电脑上编译生成可执行文件,最后在电脑上运行。程序的编辑——》编译——》运行,整个过程都是在一台 X86 电脑上。
下载并启动qemu镜像,配置qemu虚拟机中的网络。在这里下载qemu的mips镜像
在一个平台上生成另一个平台上的可执行代码。为什么要大费周折的进行交叉编译呢?一句话:不得已而为之。有时是因为目的平台上不允许或不能够安装所需要的编译器,而又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行所需要的编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。
该文介绍了交叉编译工具链的使用,包括arm-linux-gnueabi-gcc、arm-linux-gnueabihf-gcc、arm-none-eabi-gcc、arm-none-linux-gnueabi-gcc、arm-none-linux-gnueabihf-gcc、qoriq-elf-gcc等工具的使用方法。
The GNU Compiler Collection,通常简称GCC,是一套由GNU开发的编译器集,为什么是编辑器集而不是编译器呢?那是因为它不仅支持C语言编译,还支持C++, Ada, Objective C等许多语言。另外GCC对硬件平台的支持,可以所无所不在,它不仅支持X86处理器架构, 还支持ARM, Motorola 68000, Motorola 8800, Atmel AVR, MIPS等处理器架构。
在Rust源代码的rust/compiler/rustc_target/src/asm/spirv.rs文件中,实现了对SPIR-V(Standard Portable Intermediate Representation for Vulkan)汇编语言的支持。
近日,知乎上有条帖子火了,有人提问:清华大学计算机专业本科这位在「自己写的 CPU 上运行自己写的操作系统」的同学是什么水平?
ImHex是一款功能强大的十六进制编辑器,该工具专为逆向工程分析师、编程开发人员以及那些想好好保护自己眼睛的安全人员所设计。哪怕你每天工作到凌晨三点(虽然不建议),也不会伤害你的眼睛!
主要是IDA,IDA的安装就不用多说了。这里说明的是辅助插件MIPSROP这些插件的安装,书里面给的插件的链接已经无法支持IDA 6.7以后的版本,主要是由于版本以后的API有更新,具体原因IDA的官方博客也给出了说明,查看了issue以后,发现有大佬已经写了能够支持IDA7.0的插件,安装的命令照着readme做即可顺利的装上。
xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。
最近,一个来自福州的男生突然火了,原因是知乎上一个热帖《清华大学计算机专业本科的这位同学是什么水平?》:
编译环境 Ubuntu 16.04 x86_64 ingenic X2000 编译工具链 从君正官网下载 : http://www.ingenic.com.cn/?product/id/34/lm
rust/compiler/rustc_target/src/spec/mipsel_unknown_linux_uclibc.rs文件的作用是定义了Rust编译器的MIPS小端架构的目标描述符(target descriptor)和特定于该目标的特性和配置。
(3)解压。并进入代码文件夹 执行./autogen.sh 可能会报错:libtoolize: command not found 这个须要安装一下依赖的工具包:apt-get install libtool
所有这一切都源自一个学生实验项目:CPU Experiment(CPU 实验)。首先说说这个 CPU 实验是什么。
猫头虎博主来了!今天我们深入探讨Go语言在ARM及其他非x86处理器上的支持和发展。随着ARM硬件在服务器、笔记本和开发者机器上的兴起,Go语言的跨平台特性显得尤为重要。让我们一探究竟!
这里选择LuaJit在嵌入式Linux系统使用,LuaJit交叉编译也比较简单,没有第三方库的依赖,直接交叉编译源码即可。
Linux Lab 是一套用于 Linux 内核学习、开发和测试的即时实验室,可以极速搭建和使用,功能强大,用法简单!
目前大多数CPU都支持浮点运算单元FPU,FPU作为一个单独的协处理器放置在处理器核外,但是对于嵌入式处理器,浮点运算本来就少用,有些嵌入式处理器就会去掉浮点协处理器。
通过阅读README知道,go1.txt可以通过go tool api命令生成。而通过go1.txt可以做成编辑器的api自动提示,比如Vim:VimForGo next.txt是一些将来可能加入的API
经过十多年的发展,龙芯将抛弃MIPS指令集,转而使用LoongArch 指令集。 > > LoongArch是全新的指令集。包含基础指令 337 条、虚拟机扩展 10 条、二进制翻译扩展 176 条、128位向量扩展 1024 条、256 位向量扩展 1018 条,共计 2565 条原生指令。 > > MIPS、X86、ARM、Risc-V都将通过二进制模拟来运行,不再原生支持。区别只是MIPS与LoongArch近似度较高,效率会高一些。
关于RetDec RetDec是一款功能强大的基于LLVM的可重定目标机器代码反编译器,该工具支持的反编译器不限于任何特定的目标体系结构、操作系统或可执行文件格式。 当前版本的RetDec支持下列文件格式: ELF PE Mach-O COFF AR(文档) Intel HEX 原始机器代码 当前版本的RetDec支持下列体系结构: 32位:Intel x86、ARM、MIPS、PIC32和PowerPC 64位:x86-64,ARM64(AArch64) 功能介绍 1、提供带有详细信息的可执行
中,我们分别讨论了大小端模式、Cache和内存序对于移植代码的影响。那么本文,我们再从编程语言的角度,思考一下移植代码时应该注意的事项,尤指底层代码或操作系统代码。
前段时间得知龙芯团队成功移植并开源了 CoreCLR ,忙完事情后,快乐地捣鼓一下这个东西。近年来国产操作系统、芯片等的到很大的关注和快速发展,我们开发的软件适配国产的机器环境就尤为重要,未来 IT 行业的变化会影响到我们的饭碗。
文件riscv64gc_unknown_fuchsia.rs位于Rust源代码中的rustc_target/src/spec目录下,它的作用是为RISC-V 64位架构提供目标特定的配置和特性定义。
xmake是一个基于Lua的轻量级现代化c/c++的项目构建工具,主要特点是:语法简单易上手,提供更加可读的项目维护,实现跨平台行为一致的构建体验。
架构这个词,英文是architecture,牛津词典对其解释为the design and structure of a computer system。所以,这个词体现的是设计和结构,也就是说,是一个抽象机器或通用模型概念上的描述,而不是一个真实机器的实现。这就好比一辆手动挡车,无论是前轮驱动还是后轮驱动,它的油门总是在右,离合器在左。这里,油门和离合器的位置就相当于架构,前轮还是后轮驱动是具体实现。所以,相同的架构,实现未必相同。
首先了解ARMer9开发系统硬件设计上和三星原装SMDK2410之间的区别。让uboot在ARMer9开发系统上跑起来,目前只需要关注如下的硬件区别,解决了下面这个问题,uboot就可以在ARMer9开发系统上正常地从串口输出,进入提示符。很多命令都可以使用,当然有些命令需要做修改。
交叉编译器是在PC上运行的编译器,但是编译后得到的二进制程序却不能在PC 上运行,而只能在开发板上运行。交叉编译器命名方式一般遵循“处理器-系统-gcc”这样的 规则,一般通过名称便可以知道交叉编译器的功能。
该文件(rust/compiler/rustc_target/src/spec/mips_unknown_linux_gnu.rs)是Rust编译器针对MIPS架构上的Linux系统的目标描述文件。它的作用是定义了在这个目标上编译时的一些配置和规则。
Toochain即交叉编译工具链,是Linux Host机上用来编译和调试嵌入式设备程序的一系列工具的集合。ISVP中的Toolchain版本信息如下:
以前写程序用“打孔卡(Punched Card),没法像今天,掏出键盘就能打字,而是要先在脑海/纸写出程序,然后在纸带/卡片上打洞。这样,要写的程序、要处理的数据,就变成一条条纸带或者一张张卡片,之后再交给当时的计算机去处理。
上一篇文章分了一下ARM系统的路由器漏洞,本次打算尝试一下MIPS系统,于是选了最近DLink路由器的漏洞CVE-2019-17621作为目标。同样一路走来各种踩坑不断,“纸上得来终觉浅,绝知此事要躬行”,对整个过程做一下梳理。
对于没有做过嵌入式编程的人, 可能不太理解交叉编译的概念, 那么什么是交叉编译?它有什么作用?
交叉编译是为了在不同平台编译出其他平台的程序,比如在Linux编译出Windows程序,在Windows能编译出Linux程序,32位系统下编译出64位程序,今天介绍的gox就是其中一款交叉编译工具。
左边是一段C语言程序,右边是对应的汇编语言,这对于咱们学习逆向、二进制安全的同学来说简直不要太方便了!
当年写程序,不像现在这样,都是用一种古老的物理设备,叫作“打孔卡(Punched Card)”
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/83823082
写在前面:这本书前前后后花了挺长时间,去年 11 月份就开始读了,中间又断了,直到最近才捡起来看完。
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/83088803
上一篇文章我给大家介绍了如何在Linux下进行Android程序的交叉编译(Linux/Mac 交叉编译 Android 程序)。 这种方式比较原始,技术门槛稍高,对之前没有做过嵌入式开发的同学来说难度还是蛮大的。
众多RISC精简指令集架构中,MIPS架构是最优雅的”舞者”。就连它的竞争者也为其强大的影响力所折服。DEC公司的Alpha指令集(现在已被放弃)和HP的Precision都受其影响。虽说,优雅不足以让其在残酷的市场中固若金汤,但是,MIPS架构还是以最简单的设计成为每一代CPU架构中,执行效率最快的那一个。
在Rust的源代码中,rust/compiler/rustc_target/src/spec/mod.rs文件的作用是定义和实现有关目标平台的规范。
领取专属 10元无门槛券
手把手带您无忧上云