问题标签 [inline-assembly]

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 投票
8 回答
18408 浏览

c# - C# 中的 x86/x64 CPUID

我的其他问题相关,请帮助我调试“未知模块中发生'System.AccessViolationException'类型的未处理异常。附加信息:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。” 单步执行代码,一切正常,直到实际调用 del() 并在该行中失败。

此代码基于本文的示例和此在 python 中工作的python 代码。我也无法让代码示例按原样工作(同样的例外),但我希望它只是有点过时了。

编辑:如果您关心我们是如何到达这里的,请查看编辑历史,这很无趣。

完成的工作版本:

注意 CPUID0 需要按正确的顺序读取:

0 投票
2 回答
1076 浏览

c++ - 使用 Assembly 和 C++ 调用函数两次

我有一个代码可以将要调用的函数更改为我的新函数,但我不想只调用我的新函数,我也想调用旧函数。这是一个例子,所以你可以理解我在说什么:

如果我反汇编我的 .exe,我会看这部分:

(0x123 是该行的地址)所以,我使用了以下代码:

现在,它不再调用 SUB_L00999999,而是调用 MyNewFunction...

所以......关于我如何仍然调用旧函数的任何想法?

我尝试过这样的事情(在很多方面),但它使我的应用程序崩溃:

注意:我使用 Visual Studio C++ 2010,这些代码在 .exe 中加载的 .dll 中。

谢谢。

0 投票
3 回答
1865 浏览

c - linux上的C内联汇编,将字符串从堆栈写入stdout

我如何从堆栈中将字符串(例如“Hello”)写入标准输出?没有数据段,也就是说。

提前致谢

0 投票
4 回答
847 浏览

c++ - C++ 中的汇编

我有以下代码。

我很了解汇编,但为什么程序不将 2 输出到屏幕上?

0 投票
4 回答
1719 浏览

c++ - 使用嵌入式汇编程序编译错误

我不明白为什么这段代码

显示以下错误。

1>c:\users\david\documents\visual studio 2010\projects\assembler_instructions\assembler_instructions.cpp(11): error C2414: 非法操作数数

一切似乎都很好,但为什么会出现此编译器错误?

0 投票
1 回答
134 浏览

gcc - 关于内联气体的文档

在阅读 linux 0.01 内核时,我会抛出一些难以解码的内联气体:

或者

我不明白如何解释“:”之间的内容。

有没有人有关于它的一些文件?

谢谢

0 投票
4 回答
29134 浏览

c - 'asm'、'__asm' 和 '__asm__' 有什么区别?

__asm { ... };据我所知,和之间的唯一区别__asm__("...");是第一次使用mov eax, var和第二次使用movl %0, %%eax结尾:"=r" (var)。还有哪些不同之处?而只是asm呢?

0 投票
2 回答
1478 浏览

c++ - 如何将内联汇编程序转换为 .asm 文件

我在将内联汇编程序函数转换为 .asm 文件时遇到问题。我需要单独的内联汇编代码,因为在 x64 架构中不支持内联汇编。这是代码,

知道如何转换并链接到我的 cpp 文件吗?从现在开始感谢。

THK

0 投票
2 回答
241 浏览

c++ - 使用基于堆的数据调用将堆栈对象作为参数的函数

我有一个复杂的问题要解决,因为我被卡住了,根本找不到解决这个问题的方法。这是一个代码

在这里,您可以看到它foo正在对堆栈上的对象进行操作,并且期望堆栈对象在foo被调用时被映射。但不幸的MyStruct是,在编译时该类型是未知的,因此我必须创建内存块,然后在运行时将数据填充到该块中,然后在foo使用 asm 调用时传递该块,如上所示。

现在如何将堆 void 指针转换为堆栈类型对象。不知何故,如果我得到 的a_myStruct参数的地址foo,我可以指向void*该位置,但我不能再次取消引用void*,以便将其转换为MyStruct类型的对象。

有没有其他方法可以解决问题?与在 C++ 中一样,我们也可以在运行时确定类型。


我在运行时在 C++ 中调用函数时遇到问题,该函数可能具有签名,其中包含在编译时未知的用户定义类型。但是这些类型的详细信息对我来说是可用的(因为我从类型库中破译了某些类型的详细信息或来自 DIA SDK)。但主要问题是现在我想在运行时调用这些函数。在编译时,我只有函数地址和用户定义类型的详细信息,其中对象或指针作为该函数签名的参数参与。现在,如果我想在运行时调用该函数,我需要首先在运行时通过在堆上创建临时块并用数据填充该块来填充该类型。我拥有该类型的所有详细信息。

现在的问题是我不知道该函数将参数作为我有可用详细信息的那种类型的指针,或者该参数正是该类型的堆栈对象。如果我有指向该类型的指针没问题,但如果对象存在我在运行时调用该函数有很大问题。

0 投票
1 回答
3589 浏览

c++ - GCC 内联汇编:调用 dword ptr

如果我在 Windows VC++ 中有以下代码:

如何使用 AT&T 语法在 GCC 内联汇编中做同样的事情?

我试过这样的事情,但它会产生一个“垃圾”错误......

然后我尝试传递somevar给一些寄存器,然后将其转换为dword,ptr等,但我无法让它工作。

更新:我发现了一些有用的东西,就像在那种情况下我们必须使用括号而不是括号一样,我发现了一些lcall调用 as 的东西far。但我仍然无法理解如何重现dword ptr