说我有
private void ThisIsMySecurityMethodPleaseLookHERE() {
//security stuff
}
Run Code Online (Sandbox Code Playgroud)
在我的程序中,但是在任何实际执行的代码中都没有调用该方法.它被编译为字节码吗?或者Java编译器是否识别出这个事实并将其过滤掉?我知道它永远不会成为PAST字节码,因为它不是真正的调用.
我问,因为我知道Java很容易反编译.当他们反编译我的.class文件时,我的所有未使用的方法也会出现吗?
我认为情况并非如此,因为如果是这样的话,每个java文件都会有膨胀代码隐藏真实代码,并通过混淆器传递.
我只是试图想到除了混淆之外的方法来抵制随意的黑客.
我正在使用本指南: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?
我做了一个简单的类来学习如何读取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基准测试.
我想找到哪些基准测试有JNI调用.
我想也许这可以通过字节码级别来帮助javap -c,但不确定.
有任何想法吗?
我正在研究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"文件中仅更改符号名称(类,接口,函数或变量)时,为什么Java字节码解释器会更改"类"文件?
我在源代码控制(GIT)下维护这两种类型,并且我一直看到"改变文件数量的两倍",即使是上面提到的外观变化.
顺便说一下,问题不在于源代码控制问题,而是仅仅是因为我将这些文件保存在GIT上的原因是为了能够"清理"(删除所有未版本控制的文件),然后运行该程序.命令行而不重新编译它.
如果你有任何想法如何实现这个功能(没有构建运行),否则我会很高兴听到它...
谢谢
我要为学校项目制作一个简单的编译器,我想生成.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 ...'
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语言规则的范围内?
所以我有一些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,但是我收到以下错误:
预编译块中的错误标头
如果有人能帮助我那将是非常好的.
对于以下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是什么意思?
bytecode ×10
java ×8
.class-file ×2
decompiling ×2
clang ×1
decompiler ×1
frontend ×1
hex ×1
javap ×1
jvm ×1
jvm-bytecode ×1
kotlin ×1
llvm ×1
lua ×1
methods ×1