小编Cod*_*ggo的帖子

具有字节目标的mov指令,用于即时存储器

我正在阅读Richard C. Detmer 撰写的题为"80x86汇编语言和计算机体系结构简介"的教科书

我有一个关于即时内存mov操作码的问题.这里也是我所指的文字部分:

继续下图4.1,下一行是即时到内存的移动.这些指令中的每一个都有操作码C6,ModR/M字节,附加地址字节(如果需要),最后是包含立即操作数的字节.如上所述对地址进行编码以用于存储器到寄存器移动.例如,如果smallCounter引用内存中的一个字节并mov smallCounter, 100组装指令,则汇编器将生成7(3 + 4)个字节的目标代码C6 05 xx xx xx xx 64,其中xx xx xx xx表示内存中的地址,64表示字节大小的十六进制版本100 .00 000 101对于直接存储器寻址,ModR/M字节05是Mod = 00和R/M = 101,不需要Reg字段并设置为000.

作为另一个示例,考虑mov BYTE PTR [edx], -1使用寄存器间接模式的存储器目的地.操作码仍然是C6,而立即字节(总是最后一个)现在是FF为-1.第二个字节是ModR/M字节,其中Mod = 00用于寄存器间接,Reg = 000(未使用),R/M = 010用于EDX,制作00 000 010或02.目标代码用于C6 02 FF.

第92页,第4章,第1节 - 复制数据

图4.1 - 带有字节目标的mov指令 - 是一个包含四列的图表:

  • 第一个列出目的地
  • 第二个上市的来源
  • 第三个上市的Opcode
  • 第四个列出了对象字节代码

上述部分中图中的线也是: …

x86 assembly opcode mov addressing-mode

1
推荐指数
1
解决办法
6764
查看次数

是否在C ++标准中定义了memcpy(dest,src,0)?

这个问题许多更多的是问,如果一个呼叫本网站上的许多问题中的memcpy()是与零值指定的长度\大小有效。回答时,每个人都引用当前的C标准(在本例中为C17 ISO / IEC9899:2017第283页),

如果声明为as的参数size_t n指定函数数组的长度,则对该函数n的调用的值可以为零。除非在本节中对特定功能的描述中另有明确说明,否则此类调用上的指针参数仍应具有有效值,如7.1.4中所述。在这样的调用中,找不到字符的函数没有出现,比较两个字符序列的函数返回零,而复制字符的函数则复制零字符。

但是,这来自C标准,C ++标准引用。

在当前的C ++标准(即C ++ 17 ISO / IEC 14882)的何处列出了相同的定义?CC ++具有两种不同的标准(和语言),据我所知,您不能引用一个标准并期望在另一个标准中存在相同的规则/行为。

如果C标准中的这种引用在C ++中有效而未在标准中明确说明,那么有人可以提供一个源来备份CC ++之间的这种连接吗?

c++ standards memcpy

1
推荐指数
1
解决办法
58
查看次数

FileNotFoundException - 进程无法访问该文件

我在学校有一个网络驱动器,我有能力正常读取和写入,但是当我使用java来获取现有的文本文件并尝试写入它时,我得到了以下异常:

java.io.FileNotFoundException: p:\CompSci_CheckIn_Name.txt (The process cannot access the file because it is being used by another process)
Run Code Online (Sandbox Code Playgroud)

我可以读得很好,但是当我尝试写它时,它会抛出一个例外.我可以写入桌面并从桌面读取所有内容,但是当我尝试使用网络驱动器时,它会放弃.我怎么能解决这个问题?

file = new File(directories[i], "CompSci_CheckIn_Name.txt");
readName = new BufferedReader(new FileReader(file));
userName = readName.readLine();
passed = true;
Run Code Online (Sandbox Code Playgroud)

写作

write = new PrintWriter(file);
write.println(newUser);
write.flush();
userName = newUser;
write.close();
Run Code Online (Sandbox Code Playgroud)

我已经尝试过BufferedWriter没有运气,同样的结果.

java file-io filenotfoundexception

0
推荐指数
1
解决办法
8629
查看次数

XOR指令无法正常工作(英特尔8086)

我正在研究一个我很着迷的主题,逆向工程.但是我遇到了一点速度碰撞.我知道按位运算符xor以及它对这些位的作用,但是当我在反汇编程序中查看它时,它似乎无法正常工作.我正在处理的一小段代码是:

MOV EAX, 0040305D
XOR DWORD PTR [EAX], 1234567
Run Code Online (Sandbox Code Playgroud)

之前的XOR已经发生,驻留在该位置的数目0040305D123431323334十六进制(它被表示为ASCII,因为它是从用户输入取和它牢固地驻留如31323334在存储器中).当我在互联网上查找xor计算器以检查以确保我在纸上完成所有操作时,我得到xor计算的结果为30117653十六进制.但是当我在反汇编程序中运行该操作时,它用56771035替换了EAX中保存的内存位置.

刚刚发生了什么?我在这里错过了什么吗?我检查了许多计算器的xor计算,我无法得到56771035的答案.有人可以帮我一把,告诉我我做错了什么吗?

-担

memory assembly reverse-engineering intel xor

0
推荐指数
1
解决办法
176
查看次数