当前位置: 首页 > wzjs >正文

沈阳怎么制作网站程序企业网站seo服务

沈阳怎么制作网站程序,企业网站seo服务,怎么做网站页面,网站建设计划表模板在做一个题的时候发现了mul指令,自己写的kengen和OD里面断下来的状态不同,最后定位出了是mul指令的原因。简单记录下,提高印象。 0x01 mul基础概念 32位模式下整数乘法可以实现32、16或8位的操作,64位下还可以使用64位操作数。 …

在做一个题的时候发现了mul指令,自己写的kengenOD里面断下来的状态不同,最后定位出了是mul指令的原因。简单记录下,提高印象。

0x01 mul基础概念

32位模式下整数乘法可以实现32168位的操作,64位下还可以使用64位操作数。
MUL执行无符号乘法,IMUL执行有符号乘法
MUL:无符号数乘法
32 位模式下,MUL(无符号数乘法)指令有三种类型:

  • 执行 8 位操作数与 AL 寄存器的乘法;
  • 执行 16 位操作数与 AX 寄存器的乘法;
  • 执行 32 位操作数与 EAX 寄存器的乘法

MUL 指令中的单操作数是乘数。下表按照乘数的大小,列出了默认的被乘数和乘积。由于目的操作数是被乘数和乘数大小的两倍,因此不会发生溢岀,换句话说,两个8位二进制数的乘积不会超过16
在这里插入图片描述

0x02 实际体验

#include <iostream>
#include <string>
#include <cstdint>int main()
{std::string username;// 获取用户名输入std::cout << "用户名: ";std::getline(std::cin, username);int userLen = username.length();if (userLen < 4) {printf("用户名长度过短");return 0;}int result = 1;for (int i = 0; i < userLen;i++) {result *= username[i];printf("0x%x\n", result);}return 1;
}

上面的代码是根据汇编自己写的算法,但是最后结果和预期结果不同,预期比下列结果要大2
在这里插入图片描述
最终在汇编中发现多了一段加上edx的操作,之前因为edx一直为0,就忽略了一段。然后下面通过ai修改过的代码,主要是使用了无符号整数

#include <iostream>
#include <string>
#include <cstdint>  // 包含 uint32_t 和 uint64_tint main() {std::string username;std::cout << "用户名: ";std::getline(std::cin, username);if (username.length() < 4) {std::cout << "用户名长度过短";return 0;}uint32_t eax = 1;  // 模拟EAX寄存器uint32_t edx = 0;  // 模拟EDX寄存器(高位)for (char c : username) {uint8_t ecx = static_cast<uint8_t>(c);  // 当前字符的ASCII值if (ecx == 0) break;  // 遇到空字符终止(如汇编中的OR ECX,ECX/JE)// 模拟 MUL ECX 指令(32位乘法)uint64_t product = static_cast<uint64_t>(eax) * ecx;// 分离高低32位(EDX:EAX)edx = static_cast<uint32_t>(product >> 32);  // 高32位eax = static_cast<uint32_t>(product);        // 低32位// 模拟 ADD EAX, EDXeax += edx;// 输出当前状态(与调试器对比)printf("字符 '%c' (0x%02X): EAX=0x%08X, EDX=0x%08X\n", c, ecx, eax, edx);}std::cout << "最终结果: EAX = 0x" << std::hex << eax << ", EDX = 0x" << edx << std::endl;return 0;
}

在这里插入图片描述
这一次就是汇编正确的效果了,结果相差为2

0x03 分析原因

根本原因:在计算到字符n 时,累乘值eax已经非常大110,996,500,乘以 nASCII110后,结果12,209,615,000超过了 32 位无符号整数的最大值(2³² - 1 = 4,294,967,295)。这导致 mul 指令产生溢出,结果的高 32 位存储在 edx 中。

数值计算:12,209,615,000 ÷ 4,294,967,296 ≈ 2.842,因此商(高位部分)为 2,余数(低位部分)为 3,619,680,408。这就是 edx = 2 的直接原因。

循环行为:在之前的迭代中,乘积结果均小于 2³²,因此 edx 保持为 0。只有在最后一次乘法时,数值足够大,才触发 edx 非零。

http://www.dtcms.com/wzjs/299336.html

相关文章:

  • 许昌网站建设费用seo外包公司专家
  • 网站建设收费价目表seo排名优化推广报价
  • 酷虎云建站关键词搜索方法
  • 哪个网站做自行车评测的宁波seo公司推荐
  • 正规的饰品行业网站开发开封seo推广
  • 影楼修图用什么软件广州网站营销seo
  • 京山网站开发百度站长平台
  • 网站空间 按流量计费网络媒体有哪些
  • 软件公司市值排名成都sem优化
  • 北京网站设计有名 乐云践新注册推广赚钱一个80元
  • 做自己的网站要多少钱网络推广员要怎么做
  • 网站建设文化报价高端网站建设
  • 昭通高速装配式建筑公司网站织梦seo排名优化教程
  • 网站建设套餐有哪些帮收款的接单平台
  • 网站建设视频教程下载seo优化师是什么
  • 网站设计与制作简单吗seo工具包
  • 做网站需要的技术不受国内限制的浏览器下载
  • 河南那家公司做家具行业网站好新媒体营销策略有哪些
  • 在网站建设工作会议上的讲话青岛爱城市网app官方网站
  • 自己做网站帮公司出认证证书违法吗宁波网站seo哪家好
  • 嘉兴制作网站企业全国疫情高峰感染进度查询
  • 建网站的公司重庆网站排名提升
  • 推广方案模板网站seo策划方案案例分析
  • 做卖衣服网站源代码seo推广是什么意思呢
  • 汉力建设网站网站接广告
  • 视频付费网站建设seo网站建设公司
  • 学校网站设计理念网站降权查询工具
  • 减肥网站如何做google关键词分析工具
  • 传媒网站后台免费模板品牌营销策划怎么写
  • 广州做英文网站的公司公司网页制作