2011-05-03 70 views
1

我有一個Lua運行時環境通過API暴露給更大的C系統。 Lua程序中有多個由C系統驅動的入口點。我還可以從Lua內部對C系統進行回調。我有root權限訪問運行Lua的系統,但沒有C源代碼。從Lua enivronment內部找到Lua程序的入口點

我發現了我可以從Lua內部對C函數進行有效回調的列表,因爲它在內部暴露--Lua必須知道這些函數是有效函數。

有什麼辦法可以發現C系統會調用的Lua函數嗎?我使用的API沒有完全記錄,我想知道我可以編寫的Lua函數的列表,這些函數將由C系統調用。

+0

謝謝您正確使用名稱_「Lua」_。 – 2011-05-03 21:54:10

+0

什麼Lua版本?什麼是更大的C系統?什麼Lua庫暴露給用戶腳本?什麼是切入點,全球功能?功能表?重寫類? – 2011-05-03 22:13:31

+0

我不知道有沒有其他方式使用'Lua'的名字?它是在運行在Linux上的家庭自動化系統的自定義進程中運行的Lua 5.1。 – 2011-05-06 00:44:47

回答

2

Lua擁有相當全面的沙盒功能。如果API設計者不想讓你知道你會做的事。

使問題複雜化更多Lua的API是非常自由的形式。應用程序設計人員可以決定向Lua公開API的方式有101種。其中沒有一個比另一個更標準。不過Lua在語言中也有一些非常好的反射和元編程。如果設計師沒有竭盡全力阻止你,那麼你可能仍然很幸運。

如果C API經常接受一個方法表(通常是一個類),則可以覆蓋__index__newindex元方法。當C API嘗試調用表中的方法時,將調用__index,並使用它試圖執行的方法名稱。然後您可以打印出一條消息或寫一個包含回調名稱的日誌。我會建議然後調用基類函數,以便應用程序保持運行(並調用回調函數)。

+0

Lua環境的沙盒效果非常好,大部分核心API函數都被刪除(例如所有操作系統和文件操作)。 – 2011-05-06 00:43:42

1

在這個特定的實例中,我能夠找到包含稱爲Lua沙箱的C代碼的編譯文件。我通過字符串運行它以獲取硬編碼到文件中的字符串列表,這使我獲得了由API發送和接收到的Lua沙箱中的API函數。

我現在有我的Lua沙箱中API可以調用的所有函數的列表。