该页面说明如下:
在Windows注册表中有一个名为MachineGUID的密钥,它具有一个UUID,它是由Windows在安装过程中创建的,理论上应该是该机器唯一的.实际情况并非如此,我经常在机器之间遇到此ID的重复.
我不明白为什么它不会是唯一的,我的意思是Windows使用一些弱算法来生成这个GUID或什么?
我可以在同一行上编写多个汇编指令,就像使用大多数高级语言一样.或者每个汇编程序是否以不同方式处理此功能?
我尝试在 NASM 的 BSS 部分创建一个变量:
section .bss
i DD 12345
Run Code Online (Sandbox Code Playgroud)
但是当尝试创建目标文件时,我收到以下警告:
warning: attempt to initialize memory in BSS section `.bss': ignored
Run Code Online (Sandbox Code Playgroud)
我想这是可以理解的,因为 BSS 部分只能包含未初始化的变量。所以我尝试了以下操作:
section .bss
i DD 0
Run Code Online (Sandbox Code Playgroud)
但我仍然收到同样的警告。
我使用以下代码获取MAC地址:
IP_ADAPTER_INFO adpInfo[16];
DWORD len = sizeof(adpInfo);
GetAdaptersInfo(adpInfo, &len );
printf("%02x%02x%02x%02x%02x%02x", adpInfo[0].Address[0], adpInfo[0].Address[1], adpInfo[0].Address[2], adpInfo[0].Address[3], adpInfo[0].Address[4], adpInfo[0].Address[5]);
Run Code Online (Sandbox Code Playgroud)
但是,如果计算机有许多网络适配器(例如:以太网和WiFi),那么每次调用此代码时,我都会获得不同的MAC地址.
有没有办法始终获得相同的MAC地址(例如:以太网).
如果我有这样的事情:
int i = 123;
float f = 123.1;
if (f > i) {} else {}
Run Code Online (Sandbox Code Playgroud)
在i将被提升到float和比较将成为if (float > float).我的问题是为什么int变量需要首先被提升为a float,是因为计算机比较容易比较两个普通数而不是试图弄清楚每个数字的位代表然后比较它?
下图显示了进程的各个部分在进程的虚拟地址空间中的布局(在Linux中):
您会看到只有一个堆栈部分(因为我假设该进程只有一个线程)。
但是,如果该进程有另一个线程,该第二个线程的堆栈将位于哪里呢?它会位于第一个堆栈的正下方吗?
在cdecl调用约定中,它指出:
Arguments are pushed in the reverse order (right to left)
Run Code Online (Sandbox Code Playgroud)
我的问题是:逆序相对于什么非逆序?与功能文档相关吗?例如,如果我有以下函数文档:
void __cdecl foo (int arg1, int arg2, int arg3)
Run Code Online (Sandbox Code Playgroud)
那么我是否应该只查看函数文档中参数的顺序并反转推入堆栈的增强?
我尝试在 FASM 中编译以下代码:
mov DWORD PTR [ebp - 4], 1234567
Run Code Online (Sandbox Code Playgroud)
它给了我一个“无效表达式”错误。但是以下代码有效:
mov DWORD [ebp - 4], 1234567
Run Code Online (Sandbox Code Playgroud)
那么 FASM 是否使用 Intel 语法(我假设第一行代码符合 Intel 语法)?
"通常的算术转换"和"整数促销"是一回事吗?我已阅读的"通常的算术转换"用于使表达的相同类型的操作数,而"整数优惠"用于促进小于类型int到int,但在MSDN这两个概念"在通常放置算术转换"仅限.
我很想知道 CPU 如何将数据写入(和读取数据)IO 端口(例如:串行/并行/USB)。
是否有直接向IO口发送数据的指令,例如:
send the number 3 to pin 0 of serial port 1
Run Code Online (Sandbox Code Playgroud)
还是CPU写入指定的内存位置,一旦数据写入该内存位置,数据会自动发送到IO口,例如:
send the number 3 to memory location 0x12345
Run Code Online (Sandbox Code Playgroud)
现在一旦将数字3写入内存位置0x12345,它将自动发送到串行端口 1 的引脚 0。
我读到有些寄存器在用户模式下x86 CPU无法修改(我相信这些寄存器称为“特权寄存器”)。
但是,x86 CPU可以在用户模式下读取这些寄存器的值,还是不允许读取?