- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不知道原始代码,但我不相信右移和abs 会这么复杂。
这是反编译后的IDA PRO代码重命名的样子
char Ship; //Could be 0-7 (8 is reversed for special purpose)
char NewShip = 1; //Could be 0-7 (8 is reversed for special purpose)
short Frequency = 0; //This could be from 0 to 9999
bool NumberToFrequency = true;
Frequency = GetNextFrequencyToJoin(player->MyArena);
if ( NumberToFrequency )
{ //TODO: maybe the below is just Frequency % 7; ?
NewShip = (((unsigned long)Frequency >> 32) ^ abs(Frequency) & 7) - ((unsigned long)Frequency >> 32);
Ship = NewShip;
} else {
Ship = NewShip;
}
这是一个 IDEOne 测试 http://ideone.com/Q2bEjU
似乎NewShip = abs(Frequency) & 7);
是我真正需要的,似乎我通过循环测试了所有可能性,它永远不会搞砸。
另一个反编译器给了我这个结果
asm("cdq ");
NewShip = ((Var1 ^ Var2) - Var2 & 7 ^ Var2) - Var2;
其中没有右移或任何对我来说仍然看起来陌生的东西,可能显示了绝对数字是如何工作的,但仍然不知道右移 32 来自哪里。
NumberToFrequency
的作用是使频率与船舶相同,但频率当然会超过 7,因此其余值仍应转换为船舶值,所以我假设它只是一个模数%
(共 7 个)。
但是为什么这么复杂的代码可能意味着完全不同的东西呢?我只是想问一下代码是什么意思我将在下面添加汇编代码。我什至在下面的程序集中找不到 Shift right 32,我很确定它在同一个位置。
.text:0040DD3A mov ecx, [ebp+1Ch] ; arena
.text:0040DD3D call GetNextFrequencyToJoin
.text:0040DD42 mov ecx, [ebp+1Ch]
.text:0040DD45 mov si, ax
.text:0040DD48 mov [esp+220h+var_20C], si
.text:0040DD4D cmp [ecx+1ACCEh], ebx
.text:0040DD53 jz short loc_40DD98
.text:0040DD55 movsx eax, si
.text:0040DD58 cdq
.text:0040DD59 xor eax, edx
.text:0040DD5B sub eax, edx
.text:0040DD5D and eax, 7
.text:0040DD60 xor eax, edx
.text:0040DD62 sub eax, edx
.text:0040DD64 mov [esp+220h+var_20F], al
编辑:我自己找到了答案,似乎那些 shift 32 >> 32
是为一些旧的 C 编译支持添加的无用垃圾,其类型匹配 32 位 DWORD 或类似的垃圾。
最佳答案
轮类并非毫无用处。这是一种无银行逻辑形式,Hexray 未能在其 c 反汇编中重现。
.text:0040DD55 movsx eax, si
.text:0040DD58 cdq
.text:0040DD59 xor eax, edx
.text:0040DD5B sub eax, edx
.text:0040DD5D and eax, 7
.text:0040DD60 xor eax, edx
.text:0040DD62 sub eax, edx
是重要的代码。 EDX:EAX
是 SI
的符号扩展版本,所以EDX
是 0 或 -1。 xor
要么离开 eax
不受影响或反转它,sub
保持不变或总共添加一个等等:
if (si < 0) {
eax = ~si;
eax += 1;
eax &= 0x7;
eax = ~eax;
eax += 1;
} else {
eax = si & 0x7;
}
第一个分支仍然可以简化,但我把它留给你......
<小时/>更新
分支仅在 si<0
上有所不同已经暗示了正在发生的事情。序列eax = ~si; eax += 1;
可以理解为two's-complement ,因此插入我们对这个补集的知识,我们得到
if (si < 0) {
eax = -1 * si;
eax &= 0x7;
eax *= -1;
} else {
eax = si & 0x7;
}
或者简而言之
eax = (abs(si) & 0x7) * sign(si);
或者使用有符号模运算符
al = si % 8;
关于assembly - 如何简化汇编翻译右移 32 异或绝对数和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23309881/
我想知道最终用户按下了什么,所以我使用了 getch() 。 如果用户按右,我可以获得0xE0 0x4D。 如果用户按下Ctrl+右,我可以获得0xE0 0x47。 如果用户按下Shift+右,我可以
我已经构建了一个应用程序来搜索我的位置。 这是代码 var map; var gdir; var geocoder = null; var addressMarker; function init
我想为我的元素设计布局 View 。布局 View 在左 Angular 和右 Angular (同一行)有一个图像,将有 2 行单词,一行在第 1 行,另一行在第 2 行。我该如何实现? It
我有一个很长的线性(分支不多)流程图,在 graphviz 中显示为要么太高而无法放在单个页面上,要么太宽(如果方向是从左到右) 是否有一种简单的方法可以让 graphviz 以从左到右,然后向下,然
我一直摸不着头脑,但运气不好。设计器有一个包含 3 栏的站点、两个侧边栏和一个主要内容区域。 专为桌面设计,左栏、主要内容、右栏。但是,在较小的设备上,我们希望首先堆叠主要内容。 所以通常情况下,你可
我想要从上到下和从左到右组织的 css block 。 为了更好地解释这是一张图片,其中包含我到目前为止所获得的内容以及我希望使用 CSS 实现的内容: 代码如下: HTML: 1 2 3 4 5
当我问this question时,答案之一(现已删除)建议Either类型对应Curry-Howard correspondence中的XOR而不是OR,因为它不能同时是Left和Right。 真相
如果一行中六个观察值中至少有三个是 != NA,我想计算该行的平均值。如果存在四个或更多 NA,则平均值应显示为 NA。 给出平均值的例子,忽略了 NA: require(dplyr) a % mut
我有一个由 9 列组成的数据框,其中包含一个因素 list 。每行可以填充所有 9 列(因为在该行中包含 9 个“事物”),但大多数没有(大多数有 3-4 个)。列也不是特定的,就像第 1 列和第 3
这是我第一次尝试使用 R 构建函数。基本上我的预期目标如下。 使用 RoogleVision 包与 Google Cloud Vision API 通信 函数遍历目录中的图片 从每张图片的 Googl
使用: mean (x, trim=0.05) 从分布的每一侧移除 2.5%,这对于对称的双尾数据来说很好。但是如果我有一个尾部或高度不对称的数据,我希望能够只删除分布的一侧。有没有这个功能,还是我自
我想保留重复的列,并删除唯一的列。这些列将具有相同的值,但名称不同。 x1 = rnorm(1:10) x2 = rnorm(1:10) x3 = x1 x4 = rnorm(1:10) x5 = x
是否可以使WPF工具栏中的元素的Right水平对齐方式正确? 我尝试将内部元素添加到Grid中,并将ColumnDefinition分配给Left / Right。我
datatable(head(iris)) 如何将我的列居中,使其位于我的列名称的正下方? 最佳答案 您可以使用options 下的columnDefs 自变量。将 className 设置为 dt-
我是 R 的新手,但我正在尝试在 R 中制作滑动窗口。 使用循环我可以像这样,但这变得非常低效。 results=c(1:7) letters=c("A","B","C","D","E","F","G
假设我有这个 .txt 文件: here is line 1 here is line 2 here is line 3 here is line 4 我想将此字符串粘贴到第 3 行和第 4 行之间:
假设我有这个 .txt 文件: here is line 1 here is line 2 here is line 3 here is line 4 我想将此字符串粘贴到第 3 行和第 4 行之间:
我想知道我的环境中有什么类型的对象。 我可以像这样显示谁在那里: ls() 但是运行类似的东西 sapply(ls(), class) (显然)不会告诉我们我们拥有什么类型(类)的对象(函数、数字、因
我想创建一个带有水平标签的树状图,但让叶子根据它们的高度悬挂,而不是仅仅下降到图的边缘。 例子: par(mfrow = c(1,2)) hc <- hclust(dist(USArrests), "
我的 CSS 中有一个元素,如下所示 .xyz{ position:absolute; left:50%; } 现在正如预期的那样,当我减小浏览器窗口的宽度时,这个元素向左移动
我是一名优秀的程序员,十分优秀!