LUA
文章平均质量分 77
lin_style
俺是农民。
展开
-
LUA源码分析五:元表
版本整理日期:2011/4/21 元表其实就是可以让你HOOK掉一些操作的一张表。表的定义在ltm.h/c的文件里。对元表的调用在lvm文件里。来看看是怎么hook的。首先定义了一堆的枚举 typedef enum { TM_INDEX, TM_NEWINDEX, TM_GC, TM_MODE, TM_EQ, /* last tag m...2011-04-22 00:08:42 · 189 阅读 · 0 评论 -
LUA源码分析三:table分析(1)
版本整理日期:2011/3/27分析函数:getn,tinsert table在里面数据方式比较直观,但是算法很复杂。一些算法的坑会慢慢补上。先总括下table的数据结构:1)由一个hash表和一个数组构成,当插入一个小标元素,会根据当前数组的大小决定插入哪儿2)hash表上会有冲突,通过一个链表的形式组织冲突的元素3)通过源码,我们还能得到的是一些table的使...2011-03-28 00:47:25 · 188 阅读 · 0 评论 -
LUA源码分析二:了解lua的文件结构和思考方式
版本整理日期:2011/3/27对lmathlib.c文件中的函数进行跟调。函数是那个不重要,这里选取math_abs/* lmathlib.c 取出一个TValue,转成整型,然后fabs处理。TValue可能是字符串,也可能就是数字。 luaL_checknumber的行为是必返回一个number值 lua_pushnumber的行为是把结果进行压栈处理,具体怎...2011-03-27 23:21:20 · 227 阅读 · 0 评论 -
LUA源码分析一:总括
1.lua语言短小,而且是我目前开发用到的语言之一,我会把它作为长期阅读的一个开源代码之一2.读完并不代表很牛了,只是把自己的一些弱点给弥补得不是那么明显3.格式上会大概如下: 1)引用一段代码时,会把大意通过注释标识出来,如果遇到具体的函数调用会通过1.x表示在后面标记段 2)有时候一遍下来,会有选择性的通读,很可能以后会回过头再次阅读,会加个时间戳表示更新 3)根据2)的读...原创 2011-03-27 23:21:12 · 180 阅读 · 0 评论 -
lua调试器:运行时的值查看
最近在看一个lua调试器,remdebug,实现远程断点调试。主要是利用协程实现,非常的舒服。 在它基础上改了一下,做了个玩具。可以实现远程,运行时某个值的查看。即服务器在运行的时候,你突然想查看某个值,直接在控制台发送命令,服务端的脚本在控制台打印出该值。共享一下源代码。不想运行的,我提供了一个简单的演示运行图的文档。RemDebug\Debug\controller.lua...2011-05-04 17:55:23 · 383 阅读 · 0 评论 -
LUA源码分析九:Debug."getlocal"
函数:{"getlocal", db_getlocal}从db_getlocal开始跟调.该函数是把自身的所有变量打印出来。大体的思路是算到执行码,根据执行码的大小限制,遍历函数保存的变量信息,然后依次打印。 static int db_getlocal (lua_State *L) { int arg; lua_State *L1 = getthread...2011-04-28 17:26:14 · 1590 阅读 · 0 评论 -
LUA源码分析八:小总结,完整分析dofile的过程和堆栈
关于一些语法包装的问题不涉及(可见前面某篇),主要对堆栈排列上的分析。一路跟调到static void f_parser (lua_State *L, void *ud)函数,堆栈记录如下:+ L->top 0x003950e8:当前指针+ L->stack 0x003950a8+ L->base 0x003950b8+ L->ci...2011-04-27 17:57:33 · 454 阅读 · 0 评论 -
LUA源码分析七:require的函数调用堆栈
require的调用其实很简单,熟悉完env的设置后,其实本质上都是走luaL_dofile函数对全局表的设置。do_file完,然后设置环境变量。借助此,把LUA里的函数堆栈方式依次跟调一次。如果是熟悉汇编堆栈的形式,对LUA的源码风格很好理解。比如没有实际的变量名,通过对栈的偏移来访问。大于0的表示从base基地址加起,负数的表示从top往后减,或者是表示特定的全局值。因为有这种...2011-04-26 17:23:14 · 495 阅读 · 0 评论 -
LUA源码分析六:环境设置
LUA源码分析五:环境设置版本日期 2011年4月22日lua里的环境设置,可以看成是一个临时的域名空间。这个空间里有名字和变量等等。可以试着运行一下以下代码,输出全局的环境 local l_lindp=1g_lindp=1for n in pairs(_G) do print(n) end 输出:stringxpcallpacka...2011-04-22 18:50:15 · 238 阅读 · 0 评论 -
LUA源码分析四:通过luaL_dofile分析IO载入流程和内部函数调用结构
版本整理日期:2011/3/31 本篇主要说明两个点:1. 载入的IO流程,2. lua内部调用函数流程两个核心的函数 int luaD_pcall (lua_State *L, Pfunc func, void *u, ptrdiff_t old_top, ptrdiff_t ef) in...2011-03-31 21:11:59 · 545 阅读 · 0 评论