标签: bytecode

Java字节码反编译 - 未使用的方法存在?

说我有

private void ThisIsMySecurityMethodPleaseLookHERE() {
//security stuff
}
Run Code Online (Sandbox Code Playgroud)

在我的程序中,但是在任何实际执行的代码中都没有调用该方法.它被编译为字节码吗?或者Java编译器是否识别出这个事实并将其过滤掉?我知道它永远不会成为PAST字节码,因为它不是真正的调用.

我问,因为我知道Java很容易反编译.当他们反编译我的.class文件时,我的所有未使用的方法也会出现吗?

我认为情况并非如此,因为如果是这样的话,每个java文件都会有膨胀代码隐藏真实代码,并通过混淆器传递.

我只是试图想到除了混淆之外的方法来抵制随意的黑客.

java methods bytecode decompiler

0
推荐指数
1
解决办法
436
查看次数

llvm通过错误

我正在使用本指南:http : //llvm.org/releases/3.0/docs/WritingAnLLVMPass.html用于创建llvm传递,但是使用时出现以下错误

opt -load ../../../Debug+Asserts/lib/Hello.so -hello < hello.bc > /dev/null


Error opening '../../../Release/lib/Hello.so': ../../../Release/lib/Hello.so: undefined symbol: _ZN4llvm12PassRegistry12registerPassERKNS_8PassInfoEb
  -load request ignored.
opt: Unknown command line argument '-hello'.  Try: 'opt -help'
Run Code Online (Sandbox Code Playgroud)

请注意,我没有文件夹“ Debug + Asserts”,而是“ Release”

有人知道这是什么问题吗?

也许是因为创建Hello.bc文件时,我使用llvm-clang而不是llvm-gcc?(本指南说使用llvm-gcc,但它不起作用:http ://llvm.org/releases/3.0/docs/GettingStarted.html#tutorial ),或者可能是因为我在使用llvm时选择了2.8版-3.0?

frontend bytecode llvm clang

0
推荐指数
1
解决办法
1188
查看次数

在Java字节码中,"Stack = 1,Locals = 1,Args_size = 1"是什么意思?

我做了一个简单的类来学习如何读取Java字节码.什么行

Stack=1, Locals=1, Args_size=1
Run Code Online (Sandbox Code Playgroud)

在folloiwng代码中意味着什么?

public Demo();
  Code:
   Stack=1, Locals=1, Args_size=1
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return
  LineNumberTable: 
   line 1: 0
Run Code Online (Sandbox Code Playgroud)

java bytecode

0
推荐指数
1
解决办法
491
查看次数

给定一个类文件,如何检测它是否使用JNI?

我有一些只有类文件的Java基准测试.

我想找到哪些基准测试有JNI调用.

我想也许这可以通过字节码级别来帮助javap -c,但不确定.

有任何想法吗?

java java-native-interface bytecode javap .class-file

0
推荐指数
1
解决办法
233
查看次数

INVOKESTATIC操作是否反向堆栈顺序?

我正在研究java字节码,当我注意到简单表达式Math.max(0,1)变成了下面的字节码指令.

ICONST_0, 
ICONST_1, 
INVOKESTATIC(java/lang/Math.max)
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果java使用后进先出堆栈,这意味着1现在将位于堆栈上的0前面,这意味着vm必须在它调用最大值时反转堆栈中项目的顺序指令在1之前得到0但是在规范中,它说明了这一点,我的假设是正确的.

java bytecode

0
推荐指数
1
解决办法
83
查看次数

为什么在仅更改符号名称后会获得不同的"类"文件?

当我在相应的"java"文件中仅更改符号名称(类,接口,函数或变量)时,为什么Java字节码解释器会更改"类"文件?

我在源代码控制(GIT)下维护这两种类型,并且我一直看到"改变文件数量的两倍",即使是上面提到的外观变化.

顺便说一下,问题在于源代码控制问题,而是仅仅是因为我将这些文件保存在GIT上的原因是为了能够"清理"(删除所有未版本控制的文件),然后运行该程序.命令行而不重新编译它.

如果你有任何想法如何实现这个功能(没有构建运行),否则我会很高兴听到它...

谢谢

java version-control bytecode

0
推荐指数
1
解决办法
74
查看次数

Java ByteCode算术运算

我要为学校项目制作一个简单的编译器,我想生成.class文件,我读取文件格式但是要更好地理解.class文件格式和我有这个类的java字节码:

public class Me {
    public void myMethod() {
        int a = 5 * 4 + 3 - 2 + 1 / 7 + 28;
    }
}
Run Code Online (Sandbox Code Playgroud)

使用javap命令我得到这个('myMethod'):

public void myMethod();
    flags: ACC_PUBLIC
    Code:
      stack=1, locals=2, args_size=1
         0: bipush        49
         2: istore_1      
         3: return        
      LineNumberTable:
        line 3: 0
        line 4: 3
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
               0       4     0  this   LMe;
               3       1     1     a   I
Run Code Online (Sandbox Code Playgroud)

在这一行:

 0: bipush        49
Run Code Online (Sandbox Code Playgroud)

我不明白,当我们得到那个数字(49)时,我没有看到算术运算的字节代码'5*4 + 3 ...'

java bytecode .class-file

0
推荐指数
1
解决办法
303
查看次数

Kotlin Decompiler生成错误的代码 - 是否可以防止?

class CheckInventory(target: Target) : Command(target) {

}
Run Code Online (Sandbox Code Playgroud)

使用IntelliJ的" 显示Kotlin字节码 "选项反编译上述Kotlin代码时,它会在super()调用之上生成一个语句:

class CheckInventory extends Command {
    public CheckInventory(Target target) {
        Intrinsic.checkParameterIsNotNull(target, "target");
        super(target); //error, must be first call
    }
}
Run Code Online (Sandbox Code Playgroud)

还有一些其他问题,例如使用WhenMapping生成具有访问修饰符的顶级类:

public class MyClass {

}

public final class MyClass$WhenMappings { //error, shouldn't be public

}
Run Code Online (Sandbox Code Playgroud)

我检查了Kotlin和IntelliJ更新,我正在使用最新版本.

起初我认为它可能与写得不好的Kotlin代码有关,但即使是最简单的代码文件似乎也需要某种在Java中非法的检查/生成.

有没有办法确保反编译过程保持在Java语言规则的范围内?

java decompiling bytecode intellij-idea kotlin

0
推荐指数
1
解决办法
1130
查看次数

如何反编译这个Lua字节码?

所以我有一些Lua字节码,现在我想把它重新编译成人类可读的代码:

\27\76\117\97\81\0\1\4\8\4\8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\4\0\0\0\5\0\0\0\65\64\0\0\28\64\0\1\30\0\128\0\2\0\0\0\4\6\0\0\0\0\0\0\0\112\114\105\110\116\0\4\9\0\0\0\0\0\0\0\72\105\32\116\104\101\114\101\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
Run Code Online (Sandbox Code Playgroud)

我怎么做到这一点?我尝试过使用LuaDec,但是我收到以下错误:

预编译块中的错误标头

如果有人能帮助我那将是非常好的.

lua hex decompiling bytecode

0
推荐指数
1
解决办法
1469
查看次数

IF_ICMPNE是什么意思?

对于以下Java类:

public class ArtClass {
   public boolean foo(int x) {
      if(x == 3956681)
        return true;
      else if(x == 9855021)
        return true;
      else if(x == 63085561)
          return true;
      else
        return false;
   }
}
Run Code Online (Sandbox Code Playgroud)

它的JVM指令是:

I4 Branch 1 IF_ICMPNE L3
I13 Branch 2 IF_ICMPNE L5
I22 Branch 3 IF_ICMPNE L7
Run Code Online (Sandbox Code Playgroud)

据我所知,第一个分支是在第三行与同为第二和第三分支但到底是什么IF_ICMPNE意思,也做什么I4,I13以及I22是什么意思?

java jvm bytecode jvm-bytecode

0
推荐指数
1
解决办法
169
查看次数