ARM Linux引导手册上说寄存器r0应该为零。为什么寄存器r0应该是zer0?
CPU register settings
r0 = 0.
r1 = machine type number discovered in (3) above.
r2 = physical address of tagged list in system RAM.
我浏览了arch/arm/kernel/head.S,但找不到原因。
我正在调试实现一个算法的代码,其主循环在la s >= u || s <= l语句为true时终止,其中s、u和l是在主循环中更新的doubles。在本例中,所有三个变量都在0.5和1.5之间。我不包括这里的代码,因为它不是我写的,提取一个MWE是困难的。我对代码在不同体系结构上的不同行为感到困惑,我希望下面的线索能够帮助我缩小算法中的错误。
一些浮点四舍五入似乎是错误的根本原因。到目前为止,我已经确定如下:
该算法在x86-64上的所有优化级别上正确终止。
该算法在-O3 (未尝试其他opt级别)的arm64、mips64和ppc64上正确终止。
该算法与-O0在i6
我正在尝试从我的64位英特尔机器上的源代码编译linux内核0.0.1。只是为了填充boot和main,我必须修改所有的makefile以获得32位编译。
因此,这是make的输出:
In file included from traps.c:7:0:
../include/string.h:128:22: warning: conflicting types for built-in function ‘strchr’
extern inline char * strchr(const char * s,char c)
^
../include/
因此,我正在学习一些基本的组装,IA-32,我有一些困难,不知道如何实际注册存储的东西。下面的程序按索引位置(a1i+a2i)添加两个给定数组的元素,并将结果存储在第二个寄存器中。数组的长度相同。我正在使用gdb,所以我知道循环部分可以工作。
EXIT = 1
WRITE = 4
LINUX_SYSCALL =0x80
.data
array1: .int -1, 5, 1, 1, 4 # um vetor de inteiros
array2: .int 1, -3, 1, -5, 4 # vetor que fica com a soma dos dois
.text
.globa
我正在用nasm和gcc编写汇编语言中的while循环,以便在Linux终端中编译。该程序比较x和y,直到y >= x,并报告在结尾的循环数。下面是代码:
segment .data
out1 db "It took ", 10, 0
out2 db "iterations to complete loop. That seems like a lot.", 10, 0
x db 10
y db 2
count db 0
segment .bss
segment .text
global main
exter
我确实有一个Arduino项目,它可以做一些事情,然后通过它的串口将结果发送给运行Linux的计算机。这是一个RS232连接,9600波特,连接到9-PINCOM端口或使用USB/ is 232适配器(最终是相同的任何方式)。
现在,我可以使用迷你车直接构建自己的阅读器,并直接从/dev/ttyS0 0读取,但是在构建自己的解决方案之前,我想知道是否已经有了某种普通标准--常识告诉我,在*NIX的几十年中,一定有人已经构建了某种东西。但是到目前为止,我发现了很多关于手动读取或使用AT命令集的信息,这实际上并不适用于这里。
类似于"syslog over RS232“之类的东西。我的数据
我记得在Agner的出色指南中,64位Linux可以通过寄存器传递6个整数函数参数:
(第8页)
我的职能如下:
void x(signed int a, uint b, char c, unit d, uint e, signed short f);
我需要传递一个额外的无符号的短参数,这将使总共7。但是,我实际上可以从现有的6中得到7的值。
因此,我的问题是,以下哪一项是更好的性能实践:
将已计算的值作为64位Linux上的第7个参数传递。
不是传递已经计算过的值,而是使用现有的6个参数中的一个再次计算它。
所讨论的操作是一个简单的位移位:
unsigned short
我正在尝试分析虚拟机(linux)中的恶意软件,但是它使用丘比特输出来验证它是否在虚拟机/沙箱中,并且拒绝在虚拟环境中运行恶意代码。
是否可以更改/伪造cpuid指令的输出,以便当恶意软件检查cpuid标志时,它会看到非虚拟化机器的cpuid?
我知道我可以通过更改KVM配置来绕过这个问题(比如这教程中的“VM检测对策”部分),但是我想知道是否可以在不改变主机配置的情况下从来宾计算机中这样做?
我想过这个可能的解决方案:
1- $ set cpuid instruction output to X
2- $ run malware
3-当恶意软件调用cpuid时,它将看到非虚拟化环境的标志并执