我有一些带有循环的C代码:
for(int i=0; i<1000; i+=ceil(sqrt(i)))
{
do stuff that could benefit from loop unrolling;
}
我打算使用宏命令告诉GCC展开循环,但我想确保在这种情况下它确实会展开循环(因为增量不是1,但它仍然可以预处理和展开)。
可以让GCC在经过优化后输出包含代码的.C文件吗?(希望包括在程序集级优化之前使用-O进行的任何优化)?
我知道我可以使用程序集输出来确认这一点,但我更希望在C中看到一些东西--对我来说,阅读和理解起来要容易得多。
当我打开像ILSpy或dotPeek这样的工具时,我可以选择查看反编译的C#或IL。
当您查看反编译源时,反编译器是否将IL反向工程成反编译的C#?
如果是这样的话,那么反编译者将如何推断像下面这样的IL?(请注意,这是第一语言构造的一个微不足道的例子,它很难从IL中推断出来,而不是反编译器的实际输出):
IL_0000: nop // Do nothing (No operation)
IL_0001: ldstr "C" // Push a string object for the literal string
IL
在C#中,尝试编译以下代码会产生错误“涉及'A‘和’A.B‘的循环基类依赖”
public class A : A.B
{
public class B { }
}
然而,我通过一个反编译器查看了一个第三方DLL,并看到了这个结构。这怎麽可能?我只能假设第三方DLL是用其他.Net语言编写的,但是哪种语言和语法是什么?
我有一个名为StaticInitializer.class的类文件,它成功地混淆了。当我解压缩它的时候,我得到了下面的结果,其中IDE给出了编译器错误"Cannot return from within an initializer“。删除"return“语句可以解决这个问题。但实际上,我想知道的是,如果类文件在静态初始化器中有return语句,那么它是如何正确工作的。
java文件的编译和运行阶段之间是否存在不匹配,混淆检测并使用它们作为混淆的一种方式?
反编译代码
public class StaticInitializer {
static {
给定以下C#代码,其中以两种不同的方式调用Dispose方法:
class Disposable : IDisposable
{
public void Dispose()
{
}
}
class Program
{
static void Main(string[] args)
{
using (var disposable1 = new Disposable())
{
Console.WriteLine("using");
}
var disp