1.luadec软件ä¸è½½ï¼
2.Lua5.4 源码剖析——杂谈 之 如何调试Lua源码
3.Lua的源码编译和反编译
luadec软件ä¸è½½ï¼
对äº*.luaæ件,éè¦ç¨ä»ä¹è½¯ä»¶ç¨åºæå¼?
1ãå¦ææ¯æ¥ççè¯ï¼å¯ä»¥å®è£ ä¸äºç¬¬ä¸æ¹çè®°äºæ¬è½¯ä»¶ï¼ç¶åç¨ä»ä»¬æå¼luaæ件è¿è¡æ¥çãæè ç´æ¥ä¿®æ¹åç¼å为ææ¬ææ¡£æ ¼å¼ï¼ä½¿ç¨è®°äºæ¬æå¼ã
2ã以å°ç±³max2为ä¾ï¼å®åææºæå¼luaæ件æ¹æ³å¦ä¸ï¼é¦å å¯ä»¥å°å®ç½ä¸è½½ä¸ä¸ªGGï¼ä¸è½½ä¹åè¯è¨è®¾ç½®ä¸å³å¯ï¼è®°ä½è¿éä¸å®è¦æ¯å¨å®ç½ä¸è½½çï¼ä¸è½½ä¹åä¼å®è£ 两个çæ¬ï¼ä¸ä¸ªæ¯ç¡¬ä»¶å éï¼ä¸ä¸ªæ¯è½¯ä»¶å éï¼ä¸¤ä¸ªé½å¯ä»¥ä½¿ç¨ã
3ãé¦å æ£æ¥èªå·±Windowä¸æ没æå®è£ Luaï¼å¦æ没æçè¯/luabuilds/å»ä¸è½½ä½ æ³è¦çé£ä¸ªçæ¬ãä¸è½½ä¸æ¥åæ éå®è£ ï¼ç´æ¥é ç¯å¢åéã
4ãæå¼luaæ件使ç¨ä¸è¬çææ¬ç¼è¾å·¥å ·å°±å¯ä»¥æå¼åç¼è¾äºï¼linuxä¸ä½¿ç¨èªå¸¦çvimç¼è¾å¨ï¼windowsä¸ä½¿ç¨èªå¸¦çè®°äºæ¬å°±å¯ä»¥ã使ç¨è¦ä½¿ç¨luaæ件ï¼å¿ é¡»è¦å®è£ ä¸ä¸ªluaç解æå¨ã
5ãè¿æ¯luaèæ¬è¯è¨ç¼å¶çï¼å¯ä»¥ä¸è½½luaforwindowsè¿ä¸ªè½¯ä»¶ç¶åç¨ç¨åºæå¼è¿ä¸ª.luaæ件ã
6ãè¿ä¸ªå¾ç®å~~è¦çLuaå·ï¼æ¯1çè¯ï¼é£ä½ å¯ä»¥ä¸Luadecæ¥åç¼è¯ãä»å¹¶æ²¡æå å¯ï¼é£æ¯Luaåèç ç¨luacå å¯è¿äºï¼å¯ä»¥dofileçæ ¼å¼è°ç¨è¿è¡ï¼ç¶åä¿®æ¹æ°å¼ä¿åæ¿æ¢ã
luaèæ¬è¢«luacç¼è¯ä¹å,å¦ä½åç¼è¯æè åæ±æ åçluaæâCFLuaDCâå·¥å ·å¯ä»¥åç¼è¯ãæ åçlua5æâDisLuaâãâluadecâä¸¤ä¸ªå·¥å ·å¯ä¾éç¨ãï¼ï¼ï¼ä»¥ä¸ä¸ä¸ªå·¥å ·å¨ç½ä¸å¯æç´¢ä¸è½½ãluajitç¼è¯çluacæ件å°æ åç¼è¯å·¥å ·ã
è·è¸ªï¼è±å£³ï¼è§£å ï¼è§£å¯ï¼è·å¾luac追luaL_loadbufferluaL_loadfilelua_loadåºè¯¥å¯ä»¥æ¾å°è§£å¯å½æ°ãhookè¿3个å½æ°ï¼å¯¼åºè§£å¯åçæ°æ®ï¼ç´æ¥å°±æ¯luacæ件ãå¦æ没ç¼è¯çè³æ¯luaæºæ件ã
对äºä½¿ç¨åççluaæçæçèæ¬ï¼é½æç¸åºçåç¼è¯å¨ï¼ä½ è±ç¹å夫æç´¢ï¼ç½ä¸ä¸å®è½æ¾å°çã
å ·ä½æå¼æ¥éª¤å¦ä¸ï¼æä»¶æ ¼å¼åç¼å以*.luaæ ¼å¼åå¨ãç¶åæ们å¨æ¡é¢å®è£ 并åå»æå¼æ¥çå·¥å ·ãç¶åæ们æå¼æ¥çå·¥å ·ç¹å»æ件éæ©æå¼ãç¶åæ们éæ©luaæ件ç¹å»æå¼ãç¶åæ们æå¼åæ¥çæ件å 容ï¼å¹¶å¯ä»¥ç¼è¾ã
è¿ä¸ªå¾ç®å~~è¦çLuaå·ï¼æ¯1çè¯ï¼é£ä½ å¯ä»¥ä¸Luadecæ¥åç¼è¯ãä»å¹¶æ²¡æå å¯ï¼é£æ¯Luaåèç ç¨luacå å¯è¿äºï¼å¯ä»¥dofileçæ ¼å¼è°ç¨è¿è¡ï¼ç¶åä¿®æ¹æ°å¼ä¿åæ¿æ¢ã
lua5.1åluadec0.6è¿è¡é®é¢1ãè¿ä¸ªå¾ç®å~~è¦çLuaå·ï¼æ¯1çè¯ï¼é£ä½ å¯ä»¥ä¸Luadecæ¥åç¼è¯ãä»å¹¶æ²¡æå å¯ï¼é£æ¯Luaåèç ç¨luacå å¯è¿äºï¼å¯ä»¥dofileçæ ¼å¼è°ç¨è¿è¡ï¼ç¶åä¿®æ¹æ°å¼ä¿åæ¿æ¢ã
2ãæ¯çï¼è¿åºè¯¥æ¯å·²ç»ç¼è¯è¿çLUAç¨åºï¼æ¯äºè¿å¶ä»£ç ï¼ä¸æ¯ææ¬ï¼æ以æå¼ä¹åæ¯ä¹±ç ãé¤éä½ æ¾åä½è 请æ±ä»æä¾æºä»£ç ï¼ä¸ç¶åºæ¬ä¸æ 解ã
3ãè¿ä¸ªæ¯baseç¼ç è¿çï¼base解ç ä¸ä¸å°±å¥½äºã
luacèæ¬æä¹ç¼è¾æå¼å¶ä½1ãå¨å°åä¸æå³é®ï¼éæ©éæµè§ç¸å ³å ååºåå°ãæå¼éå åæµè§å¨å°ï¼å¨çªå£ä¸æ¹å°±æ¯è¯¥å°åæå¨çå åæ°å¼ï¼å ¶å®çå åæ°å¼ä¹å¨è¿éãåå»å°±å¯ä»¥ç¼è¾ãå¯æ¯ä¿®æ¹å没ææ示ï¼ä¸å©äºæ¥çã
2ã第ä¸æ¥ï¼æ°å»ºèæ¬ï¼è¿å ¥èæ¬ç¼è¾å¨ç¹å»ä¸æ¹å·¥å ·æ çæ°å»ºæé®ï¼å°±å¯ä»¥æ°å»ºä¸ä¸ªèæ¬ã
3ãåéè¡¨æ ¼å¼ï¼æ¯è¾çµæ´»çèæ¬ç±»åï¼éç¨èå´å¹¿ï¼è¿éæä¹åäºä¸ä¸ªç®åçæ ·å¼ä½ä¸ºåèãæä¸åçç»é¢éè¦å±ç¤ºçå 容ï¼æç §å§æ åå±ä¾æ¬¡æå好ï¼å¹¶ä¸æ³¨ææ¯ä¸ªç»é¢çç»èã
4ãè¿è¡æé®ç²¾çµãå¨ä¸»çé¢ä¸ç¹éâæ°å»ºâè¿å ¥èæ¬ç¼è¾å¨çé¢å·¦è¾¹çå½ä»¤ç±»åééæ©é¼ æ å½ä»¤ã常ç¨çå°±æ¯å2个ãå设游æä¸äººç©ä¸ºä¸å¿åæ ï¼ãææ¯æ¬¡éåæªç©åéç¹éè§è²èªå·±ã
5ãæé®ç²¾çµï¼æé®ç²¾çµæ¯ä¸æ¬¾æ¨¡æé¼ æ é®çå¨ä½ç软件ãéè¿å¶ä½èæ¬ï¼å¯ä»¥è®©æé®ç²¾çµä»£æ¿åæï¼èªå¨æ§è¡ä¸ç³»åé¼ æ é®çå¨ä½ãæé®ç²¾çµç®åæç¨ï¼ä¸éè¦ä»»ä½ç¼ç¨ç¥è¯å°±å¯ä»¥ä½åºåè½å¼ºå¤§çèæ¬ã
luaappæä¹ä¸è½½luaå®ç½ãstandæ¯æ¬¾ååçé¨ç大éæ游ææ¹ç¼ç§»æ¤èæ¥ççåå°å»ç±»æ游ï¼è¯¥æ¸¸æä¸çluaéè¦å»luaå®ç½ä¸è½½ï¼å®è£ ä¹åå¦æçµèæ¡é¢çå¿«æ·é®ä¸è½æå¼ï¼å°±å»æ ¹ç®å½æ¾å°.exeå¯æ§è¡æ件å³å¯æå¼ã
Gtaå°å©æuaèæ¬ï¼ä½ å¯ä»¥å¨3DM游æç½ä¸ä¸è½½ï¼æè æ¯ç´æ¥æ游æçä¸ä¸è½½ï¼æå¨ç¾åº¦ä¸æç´¢ï¼æ¾å¨æçç¾åº¦ç½çä¸ï¼ä¹å¯ä»¥ä¸è½½luaèæ¬ã
ç½ç«ä¸è½½LUAå httpï¼//ï¼ctrl+F2è¾å ¥gnome-terminalæå¼ç»ç«¯ä¸è½½ubuntuçç¼è¯æ¯æsudoapt-getinstallbuild-essential注æï¼è¿éä¸ä» ä» æ¯å®è£ gccèå·²ï¼è¿å æ¬å¾å¤å ¶ä»å·¥å ·ã
é¦å è¦ä»â设置âéé¢ï¼æWiFiï¼æ 线å±åç½ï¼å ³æãç¶åå¼å¯ç§»å¨äºèç½âï¼è®©ææºè¿è¡ç§»å¨ç½ç»ï¼ç¶ååæå¼âAPPâæ¾åºæ¥èªå·±æ³è¦æ´æ°ç软件ã
luaæ件éè¦éè¿ç¬¬ä¸æ¹è½¯ä»¶æå¼ï¼å å°ç½ç«ä¸è½½ä¸ä¸ªGGæ件ï¼ä¸è½½åå®è£ 两个çæ¬ï¼ç¡¬ä»¶å éï¼è½¯ä»¶å éï¼ç¶åç¡®å®ææºå·²ç»è¢«rootï¼å¹¶è·å¾GGæéãå®æéå è¿ç¨åï¼ç¹å»æç´¢ï¼ç¶åä¾æ¬¡ç¹å»ä¸è§ç¬¦å·ã
Lua5.4 源码剖析——杂谈 之 如何调试Lua源码
我们有时候写了一段Lua代码,希望能通过断点调试的修改方式看一下我们的代码在执行过程中Lua虚拟机的状态与运行流程。本篇教程我将教大家Windows与Mac环境下如何配置Lua源码调试环境。源码
Lua调试环境需要有Lua源码,修改我们从官网下载源码:
Windows下Lua源码调试环境搭建
1)下载Visual Studio,源码可自行在官网下载最新版本即可:
2)打开VIsual Studio,修改源码修改叫啥创建一个新的源码C++控制台工程,我这里以Visual Studio 版本进行举例:
项目可任意命名,修改本例中我们命名为TestLua:
3)工程中添加Lua源码文件:
3.1)拷贝源代码文件到项目的源码文件夹,Makefile文件可以不拷贝:
3.2)把上面这些文件导入工程:
"
.h
头文件导入:导入所有".h"后缀文件到头文件文件夹中(右键头文件->添加->现有项):
"
.c
源文件导入:导入所有".c"后缀文件到源文件的修改文件夹(右键源文件->添加->现有项):
4)生成exe可执行文件:
文件都导入完成了,这时候如果按"生成"或者"F5",源码会有如下的修改报错:
这是因为除了我们创建项目工程的时候自带源文件中的一个main函数以外,Lua源码中也定义了两个Main函数。源码他们分别对应的修改门户源码 企业html是luac编译工具的启动函数和lua运行工具的启动函数。要想编译通过,源码我们只需要根据自己要调试目的,从3个main里面把用不到的2个main删掉或者重命名即可。
本例中,我打算在自己的main里面实现通过dofile函数执行一个Lua文件的功能,所以我不需要启动lua和luac指令控制台,所以我把他们的main函数改名:
luac.c:把main函数改名为luac_main函数:
lua.c:把main函数改为lua_main:
上述源码中多余的2个main函数都改名了,这时候已经能编译通过并生成出exe可执行文件了。
接下来我们可以开始编写自己的main函数逻辑了,打开TestLua.cpp,输入以下内容,作用是运行一个在项目目录下名字为"testlua.lua"的lua文件:
5)testlua.lua文件创建与编写:
上述代码在运行时会执行testlua.lua文件,接下来我们就需要在工程目录下创建这个将要被执行的类似菁优 源码testlua.lua文件:
打开testlua.lua文件,添加任意lua代码,这里我们简单调用print打印一句信息:
6)在Visual Studio中按“F5”开启调试,可以看到控制台被成功运行,我们的lua文件也被成功执行,打印出了信息:
7)断点调试指令OpCode:
学习过我的《Lua源码剖析 之 虚拟机》系列教程的同学应该知道Lua的指令就是各种OpCode的执行,我们可以在《lvm.c》的下面这个地方加断点再按F5重新启动程序,程序在每执行一条OpCode指令就会在这处代码断点下来,这时候我们就能看到下一条要执行的OpCode是哪一条了:
在本例中的print函数最终会执行到OP_CALL这个调用分支:
Windows环境下搭建Lua源码调试环境的教程到此结束。
Mac下Lua源码调试环境搭建
因为大部分流程与上面Windows一样,所以我下面会省略一些重复步骤。
1)下载XCode,可自行在AppStore进行下载。
2)打开XCode,贷款中介app源码创建一个新的C++控制台工程,本例中命名为TestLua:
3)工程中添加Lua源码文件:
3.1)拷贝源代码文件到项目的文件夹,Makefile文件可以不拷贝:
3.2)把拷贝后的文件导入工程:
不需要区分".h"和".cpp",全选导进来就好了:
4)与Windows流程同样,把源码自带的2个main函数改名:
luac.c:把main函数改名为luac_main函数:
lua.c:把main函数改为lua_main:
把源码中多余的2个main函数都改名了,接下来同样,开始编写我们的main.cpp,打开该文件并添加代码如下代码。为了在mac下文件读取代码更简洁,在下面的Lua文件我暂时先使用文件的绝对路径,暂时把testlua.lua文件放在我的mac的桌面上进行读取:
5)在mac的桌面上创建testlua.lua文件,添加任意lua代码:
6)同理可正常运行或者加断点进行调试,这里不再赘述:
总结
本文我们学习了如何在Windows与Mac下搭建Lua源码调试环境。alloc_vfsmnt源码另外,我们上述使用的例子是通过dofile运行一个lua文件,同学们也可以试试保留lua.c里面的main函数,删掉另外两个,此时按开始调试可启动lua的即时解析控制台,在控制台里面可自行输入任意Lua代码,并可断点查看即时运行状态或最终结果,感兴趣的同学可以自行试试。
不过,尽管能调试Lua源码,但如果之前没有学习过我的那些Lua源码剖析教程,可能很多地方会看不懂,所以这里建议有空的同学还是可以先去学习一下的。
谢谢阅读。
Lua的编译和反编译
无论是Unity项目还是Unreal的项目,我通常会使用Lua进行编程。在项目打包阶段,Lua的编译和反编译是不可或缺的步骤。在本文中,我们将探讨如何对Lua代码进行编译与反编译,以及如何利用不同的工具进行操作。
对于Lua代码的编译,我们通常有两种方法。一种是使用lua脚本直接运行代码,另一种是使用Lua的编译器(如Luac)将源代码转换为Lua字节码。通过使用指令`lua ./TestLua.lua`,我们可以测试代码的正确性。Luac是将Lua源代码编译为Lua字节码的工具,编译成功后,我们可以通过运行编译后的字节码来验证结果,一切顺利。
另一种流行的Lua编译器是Luajit,它在Unity项目中被广泛使用。使用Luajit可以提升执行速度。如果遇到编译错误,只需确保将`luajit\src\src\jit`文件放在`luajit.exe`的同一目录下的`lua`文件夹中即可。通过直接运行包含测试代码的Lua文件,我们可以确认编译和运行的流程是正确的。
在对比了两种编译方法后,我们发现它们都有各自的特点和适用场景。Luac适用于简单的脚本或对代码优化要求不高的情况,而Luajit则更适合需要高性能的项目,特别是那些对运行速度有较高要求的场景。
对于Lua的反编译,最常用的工具是`luadec`。通过将`luadec`工具与Visual Studio项目进行集成,我们能够对编译后的字节码进行反编译,恢复源代码。在尝试反编译后,我们得到了清晰可读的代码,即使在不使用调试信息的情况下,反编译结果也具有一定的可读性。
对于更复杂的反编译需求,如支持位字节码的反编译,我们遇到了一些挑战。目前,有一个名为`ljd`的工具支持位字节码的反编译,但仅限于位平台。对于位平台的字节码,我们可能需要自行修改`ljd`的Python代码来支持,这是一个需要时间和专业知识的额外工作。尽管如此,对于大部分应用场景,上述工具已经足够满足我们的需求。
总之,Lua的编译和反编译是Lua项目开发过程中的重要环节。通过选择合适的编译工具和反编译方法,可以有效提升代码的执行效率和调试效率。同时,对于反编译过程,我们应根据实际需求选择合适的工具,并注意其适用的平台和特性。