Archives
Recent Entries
Search


Links
Powered by
Movable Type 2.64

2009年10月16日

バイナリにソースを同梱とか

バイナリにソースを同梱するトカ(;´Д`)

コンパイル元のソースファイルどれだっけ?というか、コレ誰が何時作ったんだよとか多数の企業さんが客先に出入りしてるような環境だとわからなくなったりして、そもそもソースどこ行ったのよ?と非常に困ることがありました。

で、サンプル:


objcopy --add-section=.cob_src=AICS0510.cob AICS0510.so AICS0510_new.so

ヽ(´ー`)ノ
.cob_srcというセクションにAICS0510.cobってファイルを流し込んでます(ぉぃ

readelf -aの結果を外挿する前、後で比べると:


--- AICS0510.so.txt 2009-10-15 17:48:48.000000000 +0900
+++ AICS0510_new.so.txt 2009-10-15 17:52:39.000000000 +0900
@@ -10,14 +10,14 @@
Version: 0x1
Entry point address: 0xfa0
Start of program headers: 52 (bytes into file)
- Start of section headers: 121060 (bytes into file)
+ Start of section headers: 214888 (bytes into file)
Flags: 0x0
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 4
Size of section headers: 40 (bytes)
- Number of section headers: 27
- Section header string table index: 24
+ Number of section headers: 28
+ Section header string table index: 25

Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
@@ -45,9 +45,10 @@
[21] .data PROGBITS 0001d19c 01d19c 000590 00 WA 0 0 4
[22] .bss NOBITS 0001d740 01d72c 021394 00 WA 0 0 32
[23] .comment PROGBITS 00000000 01d72c 0000e6 00 0 0 1
- [24] .shstrtab STRTAB 00000000 01d812 0000d2 00 0 0 1
- [25] .symtab SYMTAB 00000000 01dd1c 000e60 10 26 193 4
- [26] .strtab STRTAB 00000000 01eb7c 000970 00 0 0 1
+ [24] .cob_src PROGBITS 00000000 01d812 016e78 00 0 0 1
+ [25] .shstrtab STRTAB 00000000 03468a 0000db 00 0 0 1
+ [26] .symtab SYMTAB 00000000 034bc8 000e70 10 27 194 4
+ [27] .strtab STRTAB 00000000 035a38 000970 00 0 0 1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings)
I (info), L (link order), G (group), x (unknown)


ちゃんと出来てますね(´ー`)typeとか弄った方が良いんですが、そういうのは追々やってまいります。

Posted by minemaz at 15:30 | Comments (0) | TrackBack

LD_PRELOADつかってOpenCOBOLで

LD_PRELOAD使ってOpenCOBOLでcob_file_openを差し替えとかヽ(´ー`)ノ

 以前にOpenCOBOLとcob_perlとMySQLで等でOpenCOBOLのデータベースファイルアクセスをMySQLへの処理に差し替える等書いてたわけですが、実際に現場で動作しています。

 ただし、この方法だと、CALL文使ってファイル関連の処理を書き換えたりするので、シカケが理解出来ていないとなかなか難しいところもあるのかなと考えていました。また、書き換え後のコードはDB処理に特化していますから、元のファイル処理のコードを書いた人(というか、大抵の場合は他社の社員の人)がメンテナンスしにくくなります。これは困りますね(;´Д`)

 ということで、LD_PRELOADつかって、libcob内のcob_file_open他file関連の関数を差し替えてしまう拡張を実装中ですヽ(´ー`)ノ。これならソース自体も元のままですし、気が向いたときファイル、またはDBを切り替え出来ますし、混在もファイルとDBでデータの突き合わせもやりやすくなります.
イメージ図

ファイル/DBの切り替えですが、特殊なファイル名(DSNとか)が指定された場合に、DBを使用するという方向で実装しています。または、ファイル名をカタログを確認して、処理方法を決める等。いずれにしろ、cob_file_open他ファイル関連の関数の処理に横入り出来ればデバッグにはかなり便利ですよね。

これと、OpenCOBOL-1.1から導入されたデバッグ用の機構を併用して「どのプログラムのどの行でどのようなデータが読み/書きされたか?」をモニタ出来るような拡張も準備中です。

ヽ(´ー`)ノ今月中に実装完了させたいところですね(出来れば)

Posted by minemaz at 15:17 | Comments (0) | TrackBack