為lua table寫保護變成唯讀

2021-07-08 09:37:10 字數 957 閱讀 7956

local function readonly(t)

local newtable = {}

local mt =

setmetatable(newtable, mt);

return newtable

endlocal tbl = readonly()

通過readonly返回的表是無法進行賦值操作的。
因為readonly會建立乙個新的空table,並把傳進去的table 作為_index的元方法。
元表裡還增加了乙個_newindex,用來阻止不存在欄位的賦值操作。
通過readonly返回的表已經不是原來的tale了,只是乙個空的table,但是它被設定了乙個新的元表。
例如 tbl[1] = "b",對tbl的第乙個元素進行賦值操作,實際上tbl是乙個空的table 根本不存在 1 這個字段,所以會呼叫_newindex的元方法 去對table進行更新。由於重寫了_newindex的元方法,所以會觸發報錯資訊。
如果只是呼叫tbl,而不去對其進行賦值。例如print(tbl[1]),則能正常輸出「a」,因為tbl元表裡有_index元方法,雖然tbl中不存在 1 這個字段,但可以通過_index找到這個字段。
注:rawget(table, key) 可以忽略元表的_index功能(就是不通過_index的元方法進行查詢) 取出table中key欄位的值
rawest(table, key, value) 可以忽略元表的_newindex功能(就是不通過_newindex的元方法對錶的不存在區域值進行更新)直接更新表key欄位區域的值。

SSDT HOOK 記憶體寫保護

有些人說不去掉也不會藍屏,照樣能hook成功 確實,我當時也是這樣過。不過拿給別人機器一測試就藍了 網上找到了mj給出的答案 當使用大頁面對映核心檔案時,段和資料段在一塊兒,所以頁必須是可寫的,這種情況下直接改是沒有問題的 hkey local machine system currentcontr...

U盤寫保護恢復

問題 使用u盤時,常出現無法寫入提示寫保護,以下為問題 u盤被寫保護,如何解開?沒有寫保護開關,在幾台機子上都試了 還是被寫保護 用了pmtd還是不行.u盤被寫保護了。我開啟u盤裡面沒有什麼按鍵。我有個1g的u盤 標是sony的 不知道怎麼弄的被寫保護了 不能格式化怎麼辦啊 求助啊 u盤被寫保護 今...

如何解決磁碟有寫保護保護

今天把資料寫入隨身碟時,才寫入到一半突然就跳出 媒體有寫保護保護 的警告視窗,連格式化都無法解決。磁碟裡的檔案無法編輯 複製和剪下。怎麼回事?以上是客戶發來的隨身碟接入電腦,結果卻提示有寫保護保護的問題。其實,大多數這個提示是由於有些隨身碟上有寫保護開關被開啟了,導致磁碟被寫保護。此時,我們關閉這個...