2018年4月12日木曜日

xxx.dll.a ではなく xxx.notdll.a へ

xxx.dll.a はインポートライブラリーです。
これをリンクすると xxx.dll を配布することになります。

しかし、意図的に xxx.a をスタティックリンクしたい場合があります。
xxx.dll を配布したくない場合など。

そこで xxx.notdll.a をリンクすることで、
xxx.dll → xxx.a へリダイレクションしたい。

具体的には:
; _deflate
extern _deflate
global __imp__deflate
__imp__deflate:
 dd _deflate
__imp__deflate はポインターです。
_deflate のアドレスを設定するような .asm を書き、
.obj にコンパイルして、
.notdll.a ライブラリを作成する方法をとりました。

こちらの内容を自動化する、
xxx.dll.a から xxx.notdll.a を作出するスクリプト notdll.sh を開発しました。https://gist.github.com/kenjiuno/bdbd6c3311f4abc94e6ad1b3ac74bdbf

---
ちなみに依存している xxx.dll たちを収集したい場合のコマンドはこちら。

$ cygcheck.exe ./pdftoppm.exe | tr -d '\r' | tr '\\' '/' | grep -vi "system32" | xargs -L1 -I{} cp {} .
今日のバージョン

$ cygcheck.exe ./smbclient | grep -Eoe "cyg[^\.]+\.dll" | uniq | xargs which | xargs.exe -I "SRC" cp SRC .

0 件のコメント:

コメントを投稿