「java生成ast」Java生成随机数

博主:adminadmin 2023-01-16 07:15:06 516

本篇文章给大家谈谈java生成ast,以及Java生成随机数对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

如何使用ANTLR4创建AST

ANTLR 是一个 Java 实现的词法/语法分析生成程序,目前最新版本为 4.5.2,支持 Java,C#,JavaScript 等语言,这里我们用 ANTLR 4.5.2 来实现一个自己的脚本语言。

因为某些未知原因,ANTLR 官方的文档似乎有些地方和 4.5.2 版的实际情况不太吻合,所以,有些部分,我们必须多方查找和自己实践得到,所幸 ANTLR 的文档比较丰富,其在 Github 上例子程序也很多,足够我们探索的了。

如果你没有编译原理的基础,只要写过正则表达式,应该也能很快理解其规则,进而编写自己的规则文件,事实上,因为结构更清晰, ANTLR 的规则文件,比正则表达式要简单得多。

openjdk javadoc在哪

请参考OpenJDK8u最新版的javadoc的实现:

不过要注意的是OpenJDK(也传递到Oracle JDK)的javadoc是在javac的基础上实现的。而javac的源码在隔壁的另一个目录里:

jdk8u/jdk8u/langtools: 2baeb96fa198 /src/share/classes/com/sun/tools/javac/

其中javac的parser在com.sun.tools.javac.parser包下,而AST类型声明在com.sun.tools.javac.tree包下。

javadoc要先让javac把源码的语法分析(parse)做好,得到里面的javadoc注释之后,再由javadoc自己的逻辑去分析注释里的内容并且生成HTML文档文件。

求教如何使用java编写加壳程序

这个问题就需要来谈谈壳的架构问题了。

壳的三大架构

1.最早的壳几乎都是virus演化来的,大部分都是汇编直接写的。

好处就是直接可以把汇编代码复制出来当作壳的loader代码添加(感染)到程序上

知名的比如aspack,upx,telock,PESpin

2.随着对于反调试要求越来越高,功能越来越多,代码一多就难以维护。

于是诞生了新的壳架构,功能采用DLL开发,使用loader来加载

这里有两个变种:

ShellCode Loader + DLL ASProtect。Themida,ACProtect等等你所熟悉的加密壳绝大部分都是这样的架构

memory loader + DLL bigfoot为代表的bambam,ZProtect,eXPressor,npack,ChinaProtect等等

这种架构简单,好维护,更好调试。其实许多其他壳或多或少的都使用这两种架构

3.对于一些纯VM的保护壳,由于没有固定代码(VMProtect等)

所以对于这样的需求首先你需要一个codegen(这个东东将陪伴你写壳的一生)

而且对于codegen其实完全可以构造一个完整的壳代码(调试比较麻烦)

不管什么语言开发的加壳软件最终都要回到opcode操作上,而对于opcode其实用神马语言都差不多

这三种架构介绍完了。那么谈谈java写壳的问题吧

其实可以简单的从语言优势上来解答:

如果说开发第三种壳用啥其实都差不多,Java和C#说不定更有优势。

上面我们说到codegen的问题,真正不适合开发的地方其实主要是在各种地址转换上面,

反汇编引擎反汇编的都是opcode结构,然后再将这些opcode串联起来构造出AST,省下的就是mutation,vm,还是其他等等操作了,

如果单纯为了解决opcode---AST(Abstract Syntax Tree抽象语法树)解决了地址转换这个问题的话其实汇编,C\C++还是Java都差不多。

反而由于Java和C#这些语言有很好的容器可以更好的来控制对象

opcode生成其实也不是难事,这些用Java还是C++其实都差不多。

真正的难点就在于上面所说的壳Loader的开发上,不管是汇编,C\C++,Delphi(不管在国内外特别是国外其实许多壳都是Delphi开发的)

都可以直接开发DLL,直接拿来变形后塞进原始程序当作壳的Loader Main部分。

而Java就只能从codegen来构造壳代码了。。。

这是一件很痛苦的事情(相信我~如果你用过Java写过c语言编译器-带连接器的那种你就会明白痛苦了)

综上所述~介于楼主的语言选择问题,估计多数是只会Java,或者需要在web层调用。

那么最好的办法还是壳主体ASM,C\C++来开发,然后开发成命令行版本,然后Java调用这个模块。

架构就这样了,剩下的就是动手操作了

用Java怎么解析C/C++代码生成AST抽象语法树结构

其中一个明显的例子是Eclipse CDT里的parser。

它是完全用Java实现的,手写的递归下降parser,能把C或C++源码parse成AST供Eclipse CDT的IDE功能使用。它支持C99语法(包括GCC扩展)、C++语法(我没仔细看现在支持到什么版本了)等。

它并不用于实际的编译(这跟Eclipse JDT里的Eclipse Compiler for Java不同);实际编译还是交给诸如GCC、xlc之类的编译器去完成。

关于Eclipse CDT里的C与C++ parser的介绍,请参考

关于java生成ast和Java生成随机数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。