青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

戰魂小筑

討論群:309800774 知乎關注:http://zhihu.com/people/sunicdavy 開源項目:https://github.com/davyxu

   :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  257 隨筆 :: 0 文章 :: 506 評論 :: 0 Trackbacks

我們有時需要限制lua代碼的運行環境,或者是讓使用者不能訪問到lua的一些全局函數.lua語言本身沒有類似于C++, C#, Java那樣的成員訪問控制. 但lua提供了setfenv函數可以很靈活的處理各類權限問題

廢話不多說, 看代碼

   1:  -- 創建沙盒
   2:  function SpawnSandBox( )
   3:   
   4:      local SandBoxGlobals = {}
   5:      
   6:      -- 基礎函數添加
   7:      SandBoxGlobals.print             = print
   8:      SandBoxGlobals.table             = table
   9:      SandBoxGlobals.string             = string     
  10:      SandBoxGlobals.math               = math 
  11:      SandBoxGlobals.assert             = assert 
  12:      SandBoxGlobals.getmetatable    = getmetatable 
  13:      SandBoxGlobals.ipairs             = ipairs 
  14:      SandBoxGlobals.pairs             = pairs 
  15:      SandBoxGlobals.pcall             = pcall 
  16:      SandBoxGlobals.setmetatable    = setmetatable 
  17:      SandBoxGlobals.tostring        = tostring 
  18:      SandBoxGlobals.tonumber        = tonumber 
  19:      SandBoxGlobals.type            = type 
  20:      SandBoxGlobals.unpack             = unpack 
  21:      SandBoxGlobals.collectgarbage     = collectgarbage
  22:      SandBoxGlobals._G                = SandBoxGlobals
  23:      
  24:      return SandBoxGlobals
  25:  end
  26:   
  27:  -- 在沙盒內執行腳本, 出錯時返回錯誤, nil表示正確
  28:  function ExecuteInSandBox( SandBox, Script )
  29:      
  30:      local ScriptFunc, CompileError = loadstring( Script )
  31:      
  32:      if CompileError then
  33:          return CompileError
  34:      end
  35:      
  36:      setfenv( ScriptFunc, SandBox )
  37:      
  38:      local Result, RuntimeError = pcall( ScriptFunc )
  39:      if RuntimeError then
  40:          return RuntimeError
  41:      end
  42:      
  43:      return nil
  44:  end
  45:   
  46:  function ProtectedFunction( )
  47:      print("protected func")
  48:  end
  49:   
  50:   
  51:  local SandBox = SpawnSandBox( )
  52:   
  53:   
  54:  print ( "Response=", ExecuteInSandBox( SandBox, "table.foreach( _G, print )" ) )
  55:   
  56:  print ( "Response=", ExecuteInSandBox( SandBox, "ProtectedFunction()" ) )
  57:   
  58:  SandBox.ProtectedFunction = ProtectedFunction
  59:   
  60:  print ( "Response=", ExecuteInSandBox( SandBox, "ProtectedFunction()" ) )

 

54行執行結果是

 

   1:  _G    table: 00421258
   2:  string    table: 00421050
   3:  pairs    function: 00567F58
   4:  collectgarbage    function: 005675F0
   5:  unpack    function: 004217E8
   6:  assert    function: 005675B0
   7:  print    function: 00567830
   8:  ipairs    function: 00567F28
   9:  type    function: 004217A8
  10:  tonumber    function: 00421768
  11:  tostring    function: 00421788
  12:  table    table: 00420DA8
  13:  math    table: 004210C8
  14:  setmetatable    function: 00421748
  15:  getmetatable    function: 00567710
  16:  pcall    function: 005677F0
  17:  Response=    nil
 
54行由于沒有注冊這個全局函數, 因此無法訪問
Response=    [string "ProtectedFunction()"]:1: attempt to call global 'ProtectedFunction' (a nil value)
 
58行在全局環境中加上了這個函數,因此在60行訪問正常
protected func
Response=    nil
 
posted on 2012-03-02 09:40 戰魂小筑 閱讀(4243) 評論(0)  編輯 收藏 引用 所屬分類: 腳本技術C++/ 編程語言
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            最新精品在线| 亚洲欧美日韩精品一区二区| 91久久一区二区| 欧美成人国产一区二区 | 亚洲一区三区在线观看| 久久九九99| 亚洲精品综合久久中文字幕| 亚洲精品孕妇| 亚洲九九爱视频| 黄色国产精品一区二区三区| 欧美人与性动交α欧美精品济南到 | 国产一区二区精品久久| 国产精品久久久久一区二区三区共| 久久久中精品2020中文| 一区二区三区色| 亚洲日韩成人| 亚洲一二区在线| 久久综合九九| 欧美成人激情视频| 性色av一区二区三区红粉影视| 亚洲欧美日韩精品久久奇米色影视| 91久久香蕉国产日韩欧美9色| 在线播放精品| 亚洲三级电影全部在线观看高清 | 亚洲精品女人| 国产精品高精视频免费| 欧美成人r级一区二区三区| 猫咪成人在线观看| 欧美ab在线视频| 亚洲免费精彩视频| 欧美日韩人人澡狠狠躁视频| 国产欧美精品日韩精品| 激情91久久| 亚洲美洲欧洲综合国产一区| 亚洲一区二区三区成人在线视频精品 | 久久五月婷婷丁香社区| 在线观看欧美一区| 亚洲欧美在线一区二区| 久久福利毛片| 欧美韩国日本综合| 在线综合视频| 欧美看片网站| 亚洲日本中文| 久久―日本道色综合久久| 亚洲人久久久| 免费观看成人www动漫视频| 欧美午夜精品久久久久久超碰| 激情久久久久| 久久精品国产69国产精品亚洲 | 欧美激情91| 国产日产高清欧美一区二区三区| 亚洲国产日韩一级| 亚洲视频你懂的| 欧美黑人在线播放| 嫩草成人www欧美| 一区二区在线免费观看| 国产专区欧美专区| 激情五月婷婷综合| 欧美一区二区黄色| 亚洲欧洲精品一区二区三区不卡| 欧美一区二区免费| 正在播放欧美视频| 午夜亚洲视频| 一区在线播放| 欧美国产精品| 欧美大片在线看| 最新高清无码专区| 亚洲欧洲一二三| 欧美日韩成人综合在线一区二区| 亚洲精品日韩在线| 久久久噜噜噜久噜久久| 影音先锋中文字幕一区二区| 欧美成人午夜77777| 欧美无砖砖区免费| 久久久久久网站| 欧美二区在线观看| 麻豆精品视频在线观看| 免费的成人av| 欧美人与性动交α欧美精品济南到 | 亚洲美女视频在线观看| 久久久精品一区| 久久久999成人| 国产精品主播| 久久成人资源| 欧美黑人一区二区三区| 亚洲精品人人| 国产欧美日本| 蜜桃av一区二区三区| 亚洲国产精品999| 日韩午夜在线播放| 亚洲成人资源网| 99国产精品久久久久老师 | 久久精品视频亚洲| 国产亚洲精品7777| 欧美承认网站| 免费成人黄色| 亚洲视频网站在线观看| 久久精品一本久久99精品| 欧美~级网站不卡| 国产精品久久久久7777婷婷| 亚洲国产91精品在线观看| 伊人狠狠色j香婷婷综合| 久久久久久夜| 亚洲全部视频| 久久国产精品毛片| 亚洲国产精品高清久久久| 欧美成黄导航| 欧美日韩精品免费在线观看视频| 在线视频一区观看| 欧美成人影音| 久久久精品一区二区三区| 国内激情久久| 免费观看成人网| 亚洲精品资源美女情侣酒店| 久久午夜av| 久久精彩视频| 久久久噜噜噜久噜久久| 99在线|亚洲一区二区| 国产欧美日韩精品一区| 欧美国产91| 免费成人美女女| 久久久久91| 噜噜噜91成人网| 欧美一区在线直播| 欧美一区二区三区四区在线 | 亚洲一区999| 亚洲欧洲日本专区| 欧美jjzz| 亚洲欧洲在线播放| 日韩视频在线一区二区三区| 欧美电影免费观看网站| 欧美在线视频在线播放完整版免费观看 | 亚洲精品永久免费| 国产日韩精品视频一区| 国产精品地址| 国产精品一区二区三区乱码| 红桃视频国产一区| 国产日韩欧美一区二区三区在线观看| 久久免费视频网站| 久久午夜视频| 欧美激情欧美狂野欧美精品| 欧美另类高清视频在线| 欧美日韩色一区| 久久蜜桃精品| 嫩草影视亚洲| 久久久国产亚洲精品| 免费不卡视频| 国产精品久久久久999| 亚洲人成毛片在线播放| 亚洲精品一区二区网址| 亚洲欧美日韩区| 玖玖精品视频| 午夜精品久久久久久久久久久久久 | 亚洲欧洲午夜| 男人插女人欧美| 亚洲国产日本| 久久爱www.| 亚洲欧美综合国产精品一区| 羞羞答答国产精品www一本 | 久久亚洲精品伦理| 久久免费精品视频| 国产精品一区二区久久久久| 最新国产成人在线观看| 亚洲一区久久久| 亚洲国产成人在线播放| 亚洲一区二区三区色| 欧美高清影院| 亚洲精品日韩激情在线电影| 欧美成人dvd在线视频| 欧美成人精品激情在线观看| 在线播放中文一区| 你懂的亚洲视频| 欧美电影免费观看高清| 亚洲综合国产激情另类一区| 欧美在线国产| 亚洲国产另类久久精品| 麻豆精品视频在线观看| 欧美精品亚洲精品| 久久国产精品99国产| 麻豆精品视频在线观看视频| 在线观看日韩精品| 亚洲精品四区| 国产日韩精品久久| 欧美激情精品久久久| 欧美高清视频在线播放| 在线电影一区| 一区二区三区久久精品| 亚洲国产精品成人一区二区| 一区二区三区欧美| 国产综合网站| 一区二区三区日韩欧美精品| 亚洲国产高清在线| 午夜精品久久久久久久久久久久久| 欧美日韩一本到| 久久久久久久久一区二区| 国产精品黄视频| 亚洲成人资源网| 亚洲午夜精品网| 国产精品国产自产拍高清av王其| 久久深夜福利|