我正在研究以下代码片段:
#include <iostream>
#include <vector>
class myclass
{
public:
myclass()
{
std::cout << this << std::endl;
}
};
int main()
{
std::vector<myclass> v;
for(uint32_t i = 0; i < 10; i++)
v.push_back(myclass());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 编译代码g++ main.cpp。当我执行编译的二进制文件时,我得到:
0x7ffebb8f8cab
0x7ffebb8f8cab
0x7ffebb8f8cab
0x7ffebb8f8cab
0x7ffebb8f8cab
0x7ffebb8f8cab
0x7ffebb8f8cab
0x7ffebb8f8cab
0x7ffebb8f8cab
0x7ffebb8f8cab
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么所有的this指针都是相同的?如果我创建同一类的 10 个不同对象,则应该有 10 个不同的this指针。正确的?
据我了解,我的代码当前正在使用相同对象的引用来填充向量v。然而,我想要的是 10 个不同的对象myclass。我怎样才能得到这个?此代码是一个较大项目的一部分,该项目在new和方面存在一些问题delete。所以我无法使用该 API。我做错了什么以及如何解决这个问题?
我正在尝试在 X86_64 (amd64) ISA 中添加自定义指令。我将使用这些指令创建一个二进制文件,然后在 gem5 模拟器中运行它。要查找未使用的操作码列表,我指的是http://ref.x86asm.net/coder64.html。然而,该网站仅列出了单字节未使用的操作码。我正在寻找的是 amd64 CPU 的解码器语法,以便我可以找到哪些二进制序列无效。我尝试测试一些随机二进制序列以查看它们是否无效,并且我能够找到一些(例如0xc5000c无效的 3 字节指令)。然而,我想要 amd64 CPU 用来解码指令的语法,以导出更长的无效二进制序列。是否有任何资源可用于此任务?
目前,为了查找二进制序列,我使用 C 程序,如下所示:
int main()
{
asm volatile(".byte 0x06" ::: "memory");
asm volatile(".byte 0x07" ::: "memory");
asm volatile(".byte 0x0E" ::: "memory");
asm volatile(".byte 0x16" ::: "memory");
asm volatile(".byte 0x17" ::: "memory");
asm volatile(".byte 0x1E" ::: "memory");
asm volatile(".byte 0x1F" ::: "memory");
asm volatile(".byte 0x27" ::: "memory");
asm volatile(".byte 0x2F" ::: "memory");
asm volatile(".byte 0x37" ::: "memory");
asm volatile(".byte 0x3F" ::: "memory"); …Run Code Online (Sandbox Code Playgroud)