问题标签 [basm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1983 浏览

delphi - 使用 ASM 调用对象方法——第 2 部分

这个问题是基于以前的,但这只是仅供参考。

我已经设法让它工作了,但是,我发现了一些我不清楚的东西,所以如果有人能解释以下行为,那就太棒了。

我有以下课程:

以及以下两个程序:

为了测试工作版本,需要调用以下命令:

为了测试工作的版本:

最后的问题是:为什么CallObjMethNOTWorking不工作,而CallObjMethWorking工作?我猜编译器对 TMethod 的处理方式有些特殊……但由于我的汇编知识有限,我无法理解。

如果有人能向我解释一下,我将不胜感激,谢谢!

0 投票
1 回答
1167 浏览

delphi - 如何探测英特尔® 高级矢量扩展的可用性?

如何使用 Delphi 2007 检查一个盒子是否支持 AVX。

我的问题仅限于查询 CPU 中的支持(假设操作系统正常/带有 SP1 的 Windows 7)。

由 Chris Lomont撰写的题为Intel® Advanced Vector Extensions 简介的 PDF 文档 解释了如何做到这一点,并提供了一个示例代码实现,但使用 c++。

它也可以在这个页面上找到

0 投票
1 回答
1636 浏览

delphi - 如何用 SSE2 优化这个 Delphi 函数?

我需要一个提示,如何使用 SSE2 程序集(32 位)实现这个 Delphi 函数。也欢迎其他优化。也许有人可以告诉我,可以使用什么样的指令,所以我有一个进一步阅读的起点。

实际的:

预期的:

0 投票
1 回答
2130 浏览

delphi - Delphi 汇编调用

我一直在 IDA 中使用一些 Delphi 程序集。

而且我注意到很多我不理解的系统调用,并且找不到任何关于它们的文档。例如:我注意到很多对未知函数 LStrClr(void *) 的调用。

我能找到的最好的是这个网站http://www.delphibasics.co.uk/ByLetter.asp?Letter=A 但它缺少许多函数调用,包括 LStrClr。

非常感谢您的回复,Michael Engstler。

0 投票
2 回答
931 浏览

delphi - 使用 Delphi 内联汇编器创建类实例

我想做的是,使用程序集,创建一个类实例,调用其中一个方法,然后释放实例。

我知道我错过了一些非常重要并且可能非常简单的东西,但我不知道是什么。

仅供参考:我想了解如何在低水平上实现这一目标,而不是另一种方式。

更新

感谢 Andreas Rejbrand,我设法找到了罪魁祸首:

更新2

感谢 Arnaud 使用 EBX 而不是 PUSH/POP EAX 发现缺陷

0 投票
2 回答
7668 浏览

delphi - Delphi/ASM 代码与 64 位不兼容?

我有一些 OpenGL 的示例源代码,我想编译一个 64 位版本(使用 Delphi XE2)但是有一些 ASM 代码无法编译,我对 ASM 一无所知。这是下面的代码,我将两条错误消息放在失败的行上......

0 投票
1 回答
1037 浏览

delphi - Delphi XE/ XE2 64bit 中的 POPCNT

如何在 Delphi XE 或 XE2 下使用非常快的 Intel POPCNT 指令在 16/32/64 位字中实现 1 位计数?是否有一个库例程可以直接访问该指令?有人可以写一个演示 asm 部分来说明它的用途吗?最后,64 位 Delphi 有哪些选项(没有可用的 asm)?在此先感谢

0 投票
2 回答
1430 浏览

delphi - Delphi Assembler/RTTI-gurus:我可以获取函数中隐含 Result 变量的内存地址和类型信息吗?

考虑这个用于方法跟踪的典型代码(为说明而简化):

这是按预期工作的。输出是:

进入 F1
做一些事情...
离开 F1 - 结果 = Booyah!

我现在正在寻找一种方法来最小化调用所需参数的数量TraceMethod(),理想情况下允许我完全跳过 -Result相关的参数。我自己没有汇编程序或堆栈布局的经验,但如果我没记错的话,从我看到其他人所做的“魔法”来看,至少隐含的魔法Result变量的内存地址应该可以通过某种方式获得,不是吗? ? 也可能有人可以从那里获得它的类型信息?

当然,如果甚至可以确定“周围”函数本身的名称,这将消除将参数传递给TraceMethod完全...

我正在使用 Delphi XE2,因此可以使用所有最近引入的语言/框架功能。

在任何人提到它之前:我的实际代码已经使用CodeSite.EnterMethod/ExitMethod而不是Writeln-calls。我也知道这个简化的例子不能处理复杂的类型并且不执行任何错误处理。

0 投票
3 回答
1547 浏览

delphi - 如何获取编译时已知的汇编指令的机器代码?

我希望能够将一行 ASM 转换为 shellcode。IE:

我该如何去做,并且能够正确地转换这个 shellcode,以便我可以将它存储在一个 delphi 应用程序的变量中。IE:

0 投票
1 回答
1396 浏览

arrays - 汇编器数组最大元素搜索

我需要在 Delphi 中编写 asm 函数来搜索最大数组元素。所以那是我写的。这里有几个问题。

首先 -mov ecx, len只是在这里以正确的方式工作。实际上它替换了 value inECX但不是 value in len!如果我只是写一个例子mov ecx, 5,那么 ecx 中就会出现 5。

其次 - 我在 5 个元素的数组上测试这个函数(使用mov ecx, 5ofc )它返回一些奇怪的结果。我想可能是因为我在尝试像这样读取数组 0 元素时做了一些磨损

但如果我这样读

它说操作无效,如果我这样尝试

它说尺寸不匹配。

我该如何解决这个问题?完整代码在这里: