IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Lua 代码分析

    yzprofile发表于 2013-03-18 00:00:00
    love 0

    操作系统:Mac OS X 10.8 使用版本:Lua-5.2.0

    照旧输出lua所有的执行过程:

    http://yzprofile.me/2011/09/25/step-into-source-code.html

    修改后的Makefile

    # Makefile for building Lua
    # See ../doc/readme.html for installation and customization instructions.
    
    # == CHANGE THE SETTINGS BELOW TO SUIT YOUR ENVIRONMENT =======================
    
    # Your platform. See PLATS for possible values.
    PLAT= none
    
    CC= gcc-mp-4.7
    CFLAGS= -Wall -DLUA_COMPAT_ALL $(SYSCFLAGS) $(MYCFLAGS) -g3
    LDFLAGS= $(SYSLDFLAGS) $(MYLDFLAGS)
    LIBS= -lm $(SYSLIBS) $(MYLIBS)
    
    AR= ar rcu
    RANLIB= ranlib
    RM= rm -f
    
    SYSCFLAGS=
    SYSLDFLAGS=
    SYSLIBS=
    
    MYCFLAGS= -finstrument-functions
    MYLDFLAGS= -finstrument-functions
    MYLIBS= gcctrace.o
    MYOBJS=
    
    # == END OF USER SETTINGS -- NO NEED TO CHANGE ANYTHING BELOW THIS LINE =======
    
    PLATS= aix ansi bsd freebsd generic linux macosx mingw posix solaris
    
    LUA_A=   liblua.a
    CORE_O=  lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o \
        lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o \
        ltm.o lundump.o lvm.o lzio.o
    LIB_O=   lauxlib.o lbaselib.o lbitlib.o lcorolib.o ldblib.o liolib.o \
        lmathlib.o loslib.o lstrlib.o ltablib.o loadlib.o linit.o
    BASE_O= $(CORE_O) $(LIB_O) $(MYOBJS)
    
    LUA_T=   lua
    LUA_O=   lua.o
    
    LUAC_T=  luac
    LUAC_O=  luac.o
    
    ALL_O= $(BASE_O) $(LUA_O) $(LUAC_O)
    ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T)
    ALL_A= $(LUA_A)
    
    # Targets start here.
    default: $(PLAT)
    
    all:    $(ALL_T)
    
    o:  $(ALL_O)
    
    a:  $(ALL_A)
    
    $(LUA_A): $(BASE_O)
        $(AR) $@ $?
        $(RANLIB) $@
    
    $(LUA_T): $(LUA_O) $(LUA_A) gcctrace.o
        $(CC)  -o $@ $(LDFLAGS) $(LUA_O) $(LUA_A) $(LIBS)
    
    $(LUAC_T): $(LUAC_O) $(LUA_A) gcctrace.o
        $(CC) -o $@ $(LDFLAGS) $(LUAC_O) $(LUA_A) $(LIBS)
    
    clean:
        $(RM) $(ALL_T) $(ALL_O)
    
    depend:
        @$(CC) $(CFLAGS) -MM l*.c
    
    echo:
        @echo "PLAT= $(PLAT)"
        @echo "CC= $(CC)"
        @echo "CFLAGS= $(CFLAGS)"
        @echo "LDFLAGS= $(SYSLDFLAGS)"
        @echo "LIBS= $(LIBS)"
        @echo "AR= $(AR)"
        @echo "RANLIB= $(RANLIB)"
        @echo "RM= $(RM)"
    
    # Convenience targets for popular platforms
    ALL= all
    
    none:
        @echo "Please do 'make PLATFORM' where PLATFORM is one of these:"
        @echo "   $(PLATS)"
    
    aix:
        $(MAKE) $(ALL) CC="xlc" CFLAGS="-O2 -DLUA_USE_POSIX -DLUA_USE_DLOPEN" SYSLIBS="-ldl" SYSLDFLAGS="-brtl -bexpall"
    
    ansi:
        $(MAKE) $(ALL) SYSCFLAGS="-DLUA_ANSI"
    
    bsd:
        $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_POSIX -DLUA_USE_DLOPEN" SYSLIBS="-Wl,-E"
    
    freebsd:
        $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -lreadline"
    
    generic: $(ALL)
    
    linux:
        $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline -lncurses"
    
    macosx:
        $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_MACOSX" SYSLIBS="-lreadline"
    
    mingw:
        $(MAKE) "LUA_A=lua52.dll" "LUA_T=lua.exe" \
        "AR=$(CC) -shared -o" "RANLIB=strip --strip-unneeded" \
        "SYSCFLAGS=-DLUA_BUILD_AS_DLL" "SYSLIBS=" "SYSLDFLAGS=-s" lua.exe
        $(MAKE) "LUAC_T=luac.exe" luac.exe
    
    posix:
        $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_POSIX"
    
    solaris:
        $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_POSIX -DLUA_USE_DLOPEN" SYSLIBS="-ldl"
    
    # list targets that do not create files (but not all makes understand .PHONY)
    .PHONY: all $(PLATS) default o a clean depend echo none
    
    # DO NOT DELETE
    
    lapi.o: lapi.c lua.h luaconf.h lapi.h llimits.h lstate.h lobject.h ltm.h \
     lzio.h lmem.h ldebug.h ldo.h lfunc.h lgc.h lstring.h ltable.h lundump.h \
     lvm.h
    lauxlib.o: lauxlib.c lua.h luaconf.h lauxlib.h
    lbaselib.o: lbaselib.c lua.h luaconf.h lauxlib.h lualib.h
    lbitlib.o: lbitlib.c lua.h luaconf.h lauxlib.h lualib.h
    lcode.o: lcode.c lua.h luaconf.h lcode.h llex.h lobject.h llimits.h \
     lzio.h lmem.h lopcodes.h lparser.h ldebug.h lstate.h ltm.h ldo.h lgc.h \
     lstring.h ltable.h lvm.h
    lcorolib.o: lcorolib.c lua.h luaconf.h lauxlib.h lualib.h
    lctype.o: lctype.c lctype.h lua.h luaconf.h llimits.h
    ldblib.o: ldblib.c lua.h luaconf.h lauxlib.h lualib.h
    ldebug.o: ldebug.c lua.h luaconf.h lapi.h llimits.h lstate.h lobject.h \
     ltm.h lzio.h lmem.h lcode.h llex.h lopcodes.h lparser.h ldebug.h ldo.h \
     lfunc.h lstring.h lgc.h ltable.h lvm.h
    ldo.o: ldo.c lua.h luaconf.h lapi.h llimits.h lstate.h lobject.h ltm.h \
     lzio.h lmem.h ldebug.h ldo.h lfunc.h lgc.h lopcodes.h lparser.h \
     lstring.h ltable.h lundump.h lvm.h
    ldump.o: ldump.c lua.h luaconf.h lobject.h llimits.h lstate.h ltm.h \
     lzio.h lmem.h lundump.h
    lfunc.o: lfunc.c lua.h luaconf.h lfunc.h lobject.h llimits.h lgc.h \
     lstate.h ltm.h lzio.h lmem.h
    lgc.o: lgc.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h ltm.h \
     lzio.h lmem.h ldo.h lfunc.h lgc.h lstring.h ltable.h
    linit.o: linit.c lua.h luaconf.h lualib.h lauxlib.h
    liolib.o: liolib.c lua.h luaconf.h lauxlib.h lualib.h
    llex.o: llex.c lua.h luaconf.h lctype.h llimits.h ldo.h lobject.h \
     lstate.h ltm.h lzio.h lmem.h llex.h lparser.h lstring.h lgc.h ltable.h
    lmathlib.o: lmathlib.c lua.h luaconf.h lauxlib.h lualib.h
    lmem.o: lmem.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h \
     ltm.h lzio.h lmem.h ldo.h lgc.h
    loadlib.o: loadlib.c lua.h luaconf.h lauxlib.h lualib.h
    lobject.o: lobject.c lua.h luaconf.h lctype.h llimits.h ldebug.h lstate.h \
     lobject.h ltm.h lzio.h lmem.h ldo.h lstring.h lgc.h lvm.h
    lopcodes.o: lopcodes.c lopcodes.h llimits.h lua.h luaconf.h
    loslib.o: loslib.c lua.h luaconf.h lauxlib.h lualib.h
    lparser.o: lparser.c lua.h luaconf.h lcode.h llex.h lobject.h llimits.h \
     lzio.h lmem.h lopcodes.h lparser.h ldebug.h lstate.h ltm.h ldo.h lfunc.h \
     lstring.h lgc.h ltable.h
    lstate.o: lstate.c lua.h luaconf.h lapi.h llimits.h lstate.h lobject.h \
     ltm.h lzio.h lmem.h ldebug.h ldo.h lfunc.h lgc.h llex.h lstring.h \
     ltable.h
    lstring.o: lstring.c lua.h luaconf.h lmem.h llimits.h lobject.h lstate.h \
     ltm.h lzio.h lstring.h lgc.h
    lstrlib.o: lstrlib.c lua.h luaconf.h lauxlib.h lualib.h
    ltable.o: ltable.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h \
     ltm.h lzio.h lmem.h ldo.h lgc.h lstring.h ltable.h lvm.h
    ltablib.o: ltablib.c lua.h luaconf.h lauxlib.h lualib.h
    ltm.o: ltm.c lua.h luaconf.h lobject.h llimits.h lstate.h ltm.h lzio.h \
     lmem.h lstring.h lgc.h ltable.h
    lua.o: lua.c lua.h luaconf.h lauxlib.h lualib.h
    luac.o: luac.c lua.h luaconf.h lauxlib.h lobject.h llimits.h lstate.h \
     ltm.h lzio.h lmem.h lundump.h ldebug.h lopcodes.h
    lundump.o: lundump.c lua.h luaconf.h ldebug.h lstate.h lobject.h \
     llimits.h ltm.h lzio.h lmem.h ldo.h lfunc.h lstring.h lgc.h lundump.h
    lvm.o: lvm.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h ltm.h \
     lzio.h lmem.h ldo.h lfunc.h lgc.h lopcodes.h lstring.h ltable.h lvm.h
    lzio.o: lzio.c lua.h luaconf.h llimits.h lmem.h lstate.h lobject.h ltm.h \
     lzio.h
    gcctrace.o: gcctrace.c
    $ make macosx

    Lua 测试代码

    print("hello\n")

    得到输出:

    https://github.com/yzprofile/yzprofile.github.com/blob/master/files/lua.out

    还真长。顺藤摸瓜,搜索"hello"。



沪ICP备19023445号-2号
友情链接