Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;转换为Delphi`这个指针_C++_Delphi_This - Fatal编程技术网

C++ C++;转换为Delphi`这个指针

C++ C++;转换为Delphi`这个指针,c++,delphi,this,C++,Delphi,This,在C++中: static_cast(重新解释_cast(&this[-0x00003111])) 我不明白&这个[-0x00003111] 我不明白“[-地址]” 如何将其转换为delphi代码?这是一段奇怪的代码。要理解这一点,必须考虑以下因素 然而,重要的缺失部分是类,该类所指的。我假设这发生在类a的方法中。下面的代码与此类似 static_cast<unsigned int>(reinterpret_cast<unsigned int>(&this[-0

在C++中:

static_cast(重新解释_cast(&this[-0x00003111]))
我不明白
&这个[-0x00003111]

我不明白“[-地址]”


如何将其转换为delphi代码?

这是一段奇怪的代码。要理解这一点,必须考虑以下因素

然而,重要的缺失部分是
,该类所指的
。我假设这发生在
类a
的方法中。下面的代码与此类似

static_cast<unsigned int>(reinterpret_cast<unsigned int>(&this[-0x00003111]))
static_cast(重新解释_cast(&this[-0x00003111]))
但是用不同的表达:

static_cast<unsigned int>(reinterpret_cast<unsigned int>(&this[-0x00003111]))
A*pThis=this;
A&A=p此[-0x00003111];//又称作A&A=*(pThis-0x00003111);
A*pA=&A;
无符号int ui=重新解释强制转换(pA);
无符号int ui2=静态_转换(ui);
(为了得到这个编译,我必须使用
-fppermissive

考虑到如今64位CPU非常常见,可能是,值得一提的是,
无符号int
可能只有32位,在这种情况下,
这个
指针只有64位。因此,在这种情况下,
reinterpret\u cast
会将一半的位剪辑掉

亲爱的孩子们


请不要在家里这样做。

你不明白什么?拿着地址?数组索引?这是什么?你知道什么C++吗?如果不是,你需要学习足够多的知识来理解代码,因此它不能替代代码。它是UB将类类型重新解释为
unsigned int
,因此严格来说,该代码的含义是任意的all@Caleth:我打赌这只适用于特定的实现,作者知道在偏移量-0x3111处(乘以4)有一些东西他或她想知道它的价值。所以它可能是UB,但这看起来像一个黑客,所以UB不是那么重要。但我认为这不能简单地翻译成像Delphi这样的语言,它有一个完全不同的结构。这个问题是无法回答的,除非我们知道这段代码应该实现什么。@RudyVel这不是说“偏移量-0x3111(乘以
sizeof(decltype(*this))
”,如果它是在非(至少)的对象上运行的,那么它也是UB元素的0x3112元素array@Caleth:这是一个32位平台,其中指针和uint的大小相同。这是黑客工作的主要原因。当uint与指针的大小不同时,它无法工作。因此我非常确定sizeof(decltype(*this))这不是Pascal…IIrc至少所有的=/Cord>应该是代码>:= <代码> >但不使用Pascal DEQ。Q中的代码绝对是一个可怕的黑客。它可能在C++的特定实现中工作,但是在Delphi中实现完全相同的可能性是非常不太可能的,因为类可能完全不同。结构:@ SpktRe:当然不是德尔菲或Pascal。它是对C++代码的解释,或者试图做的。添加到5月份以前的注释:如果这是C++ Builder,那么它可能是可能的。ISTM可能尝试读取Delphi兼容C++类的VMT的偏移量-0x31(倍于UIT大小)。(甚至是Delphi类),C++Builder可以生成。没有更多的知识,这个问题无法回答。谢谢你的解释。我不懂代码。但现在我懂了代码。我不使用hack。我只是想知道这段代码。因为我研究32位处理。这段代码像hack。我搜索google并找到这段代码。但我不使用这段代码,也不使用这段代码e代表哈克,明白吗
A *pThis = this;
A &a = pThis[-0x00003111]; // aka. A &a = *(pThis - 0x00003111);
A *pA = &a;
unsigned int ui = reinterpret_cast<unsigned int>(pA);
unsigned int ui2 = static_cast<unsigned int>(ui);