問題タブ [lua-alien]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
lua - ルアとエイリアンの構造
この C 構造をエイリアン 0.50 モジュールを使用して Lua に再定義しようとしていますが、最後に 2 つの char 配列があります。szLibraryPath
とはもともと CのようにszLibraryName
定義され
char szLibraryPath[MAX_PATH]
ています。エイリアンでこれを行うことはできますか?
lua - Lua Alien Module-WriteProcessMemory関数の使用に関する問題、タイプが不明(unit32)
これが私のコードです。タイプが正しく設定されているかどうかさえわかりません。
私は完全に道に迷っており、いくつかの指導が必要です。エイリアンのためのオンラインヘルプ/ドキュメントがもっとあったらいいのにと思います。それは私の貧しい脳を混乱させます。
私を完全に困惑させているのは、 WriteProcessMemoryが正常に完了することもあれば(私の知る限りでは何もしませんが)、正常に完了しないこともあるということです。私が言ったように、私の脳は痛いです。
助けていただければ幸いです。
c++ - ポータブルアプリ、C++にエイリアンを含める
さて、私はかなり検索しましたが、これを達成する方法の答えや例を見つけることができないようです。
基本的に、移植可能に設計されたアプリがあります(VS2010ではVC ++を使用して構築されていますが、MFCまたは管理対象コンポーネントはなく、生のWinAPIです)。Lua 5.2が組み込まれていて、ユーザーがアプリケーション内でスクリプトを記述できるようにしています。さまざまなWinAPI呼び出しを処理するLuaスクリプトに公開されている複数の接着関数があります。
ただし、私ができるようにしたいのは、ユーザーが次のようなスクリプトを記述できるようにすることです。
私は単にこれを行う方法を見つけることができないようです。ユーザーにLuaforWindowsのインストールを要求したくありません。理想的には、エイリアンからのcore.dllとstruct.dllはありません。./alien/にあるこれらのDLLで何かをしようとすると、LuaForWindowsをインストールし、LFWをアンインストールしたため、Lua5.1.dllでクラッシュし、Lua5.1.dllが見つからないと表示されます。私はLua5.2をアプリに組み込んでいるので、明らかにエイリアンロックのコア/構造体DLLはLua5.1.dllがパスにあることを期待しています。
Alien srcをプロジェクトに含めようとする価値のない試みをしましたが、そのようにも機能していないようです。
任意のアイデアをいただければ幸いです。すべてがアプリに含まれていることを望みますが、それが唯一の選択肢である場合は、プロジェクトにライブラリを含めてビルドし、ディストリビューションにバンドルするという解決策を選びます。
ありがとう!
アップデート:
わかりました、Ben Voigtに感謝します!もうすぐそこにいると思います。core.cとstruct.cをプルして、libffiのすべてのパスがそこにあることを確認しました。core.c(alien.core srcファイル)でluaopen_alien_coreを呼び出そうとするまで、すべてが問題なくコンパイルされ、識別子が宣言されていないと主張します。呼び出しを行おうとしている別のソースファイルで関数シグネチャを宣言しようとしましたが、コンパイルはさらに進みますが、未解決の外部ファイルについて文句を言うのに失敗します。
明らかに、これは現在一般的なC ++の問題である可能性があります(私はこの分野の初心者にすぎないため)。これが私が持っているものの一般的な考え方です:
これはコンパイルの開始に失敗し、エラーを発行します。
これは理にかなっているので、myheader.hに次の行を追加します。
これはコンパイルされますが、リンクに失敗します:
限られた経験で、考えられるいくつかのことを試しましたが、このエラーを満足させるものはありません。core.cの内容をmysource.cに移動しようとさえしましたが、それはまったく異なる混乱を引き起こし、そのままでは間違った方法であるように見えました。
私はこれが本当にばかげていることを望んでいて、想像していますが、luaopen_alien_coreを呼び出す方法がわかりません。これは、私が必要とする最後のピースのようです。
再度、感謝します!}
winapi - Lua Alien - Win32 API WaitForSingleObject 関数で定義された変数
Alien for Luaを使用して、Windows Kernel32.dllのWaitForSingleObject 関数を参照しています。
私は Windows プログラミングの初心者なので、WaitForSingleObject のドキュメントで参照されている次の#define d 変数について質問があります。
dwMilliseconds がINFINITEの場合、関数はオブジェクトがシグナル状態になった場合にのみ戻ります。
INFINITE値とは何ですか? 当然だと-1
思いますが、これはどこにも文書化されていません。
また、次の表では、戻り値を 16 進数で示していますがL
、最後の桁の後に文字がある理由がわかりません。これは、Long にキャストするのと同じくらい簡単なことでしょうか?
私が尋ねる理由は、Lua がNumber データ型を使用しているためです。この戻り値を 16 進数 (0-F) と 10 進数 (0-9) のどちらで確認する必要があるかわかりません。
winapi - Lua 文字列が連結されない
出力を「きれい」にするために変数を連結しようとしていますが、他の文字列値と連結すると空の文字列として出力されるようです。
出力コードの抜粋は次のようになります。
出力:
このname
変数は、からWINAPI SendMessage 関数へのAlien for Lua呼び出しを介して設定されます。これは問題の一部である可能性があると思いますが、上記でわかるように、変数はタイプ (Lua) "string" に設定されており、単独で呼び出すと正常に出力されます。ただし、何かと連結すると、空の文字列 (または同様のもの) のように動作します。User32.dll
編集: 私も試しtostring(name)
てみalien.tostring(name)
ました. どちらも問題を解決しません。
lua - Luaでは、以前に圧縮されたメッセージでzlib解凍を使用する方法は?
Lua で Wireshark ディセクタを作成しています。分析されているアプリケーションは、TCP 上で実行されます。私が抱えている問題は、zlib 解凍が必要なことです。データのみを解凍する必要があります。受信したデータは送信前に圧縮されているため、圧縮されていない元のファイル サイズはありません。私が試した、または見つけたすべての例では、同じ側で圧縮してから解凍する必要があります。私はエイリアンffiを使ってこれをやろうとしています。これを回避する方法を知っている人はいますか?または、エイリアンで動作するように zlib のインフレート関数を書き直すのを手伝ってくれる人はいますか? 現在機能させようとしているコードへのリンクを含めています。 http://www.cprogramdevelop.com/3987529/
pointers - Lua Alien - ポインター演算と逆参照
私の目標は、Windows のGetModuleInformation関数を呼び出してMODULEINFO構造体を取得することです。これはすべて正常に機能しています。LPVOID lpBaseOfDll
この問題は、の一部である でポインター演算と逆参照を実行したい結果として発生しますMODULEINFO
。
Luaで関数を呼び出すコードは次のとおりです。
この時点で、mod.SizeOfImage
期待どおりの正しい値が返されているように見えるので、関数が呼び出され、構造体が作成されていることがわかります。しかし、mod.lpBaseOfDll
それはUserData
.
私がやろうとしていることに対処する可能性のあるエイリアンのドキュメントの唯一の情報は次のとおりです。
- ポインターのアンパック
Alien には、ポインターを逆参照して値を Lua 型に変換できる 3 つの便利な関数も用意されています。
Alien.tostring はユーザーデータ (通常はポインターの戻り値を持つ関数から返されます) を受け取り、それを char* にキャストして、Lua 文字列を返します。オプションの size 引数を指定できます (Alien が最初にバッファで strlen を呼び出さない場合)。
Alien.toint は userdata を受け取り、それを int* にキャストし、逆参照して数値として返します。数値を渡すと、ユーザーデータがこの要素数の配列であると想定されます。
Alien.toshort、エイリアン.tolong、エイリアン.tofloat、エイリアン.toダブルは、エイリアン.tointに似ていますが、それぞれの型キャストで動作します。無印版もご用意しております。
それらに関する私の問題は、バイトごとに移動する必要があり、alien.tochar
機能がないことです。また、さらに重要なことに、これでもベース アドレスの外にある要素を取得できるという問題は解決されません。
- バッファ
バッファを作成した後、文字列またはポインタ型の任意の引数の代わりに渡すことができます。
...
バッファまたは他のユーザーデータを構造体型の新しいメソッドに渡すこともできます。この場合、これは作成している構造体インスタンスのバッキング ストアになります。これは、C 関数が返した外部構造体をアンパックするのに役立ちます。
これらは、のalien.buffer
引数としてan を使用できることを示唆しているようです。また、バッファーはバイト配列として記述され、 、 などの表記法を使用してインデックスを付けることができます 。さらに、バッファーはバイト単位で処理されるため、これによりすべての問題が理想的に解決されます。(これを正しく理解している場合)。MODULEINFO
LPVOID lpBaseOfDll
buf[1]
buf[2]
残念ながら、この例はどこにも見つかりません (ドキュメント、stackoverflow、Google などにはありません)。そのため、これを行う方法がわかりません。構文のいくつかのバリエーションを試しましたが、ほぼすべての構文で実行時エラーが発生します (他の構文は単に期待どおりに動作しません)。
mod.lpBaseOfDll
逆参照とポインター演算を介してバイト単位 (C の文字単位) に移動する方法についての洞察はありますか?