작업물
PowerBuilder File Format
cloim
2011. 3. 2. 16:30
* 참 조 : dwoX
1. 라이브러리 헤더 블럭 (512 (1024) Byte, 괄호안은 유니코드)
시작 위치 | 끝 위치 | Type |
정보 |
1 |
4 |
Char(4) | HDR* |
5 |
18 (32) |
String | ‘PowerBuilder’ + 0x00 + 0x00 |
19 (33) |
22 (40) |
Char(4) | PBL 포맷 버전 (0400 / 0500 / 0600) |
23 (41) |
26 (44) |
Long | 생성일자 (GMT +/- 0:00) |
29 (45) |
FF |
String | 라이브러리 코멘트 |
285 (559) |
288 (562) |
Long | 첫 SCC Data Block 의 오프셋 |
289 (563) |
292 (566) |
Long | SCC Data 의 Net 사이즈 |
2. 비트맵 블럭 (512 Byte)
시작 위치 | 끝 위치 | Type |
정보 |
1 |
4 |
Char(4) | FRE* |
5 |
8 |
Long | 다음 블럭의 오프셋, 혹은 0 |
9 |
512 |
Bit(504) | 비트맵, 각 Bit 는 하나의 블럭에 해당 |
(512 - 8) * 8 = 4032 Blocks are referenced
3. 노드 블럭 (3072 Byte)
시작 위치 | 끝 위치 | Type |
정보 |
1 |
4 |
Char(4) | NOD* |
5 |
8 |
Long | 다음 좌변 블럭의 오프셋, 혹은 0 |
9 |
12 |
Long | 상위 블럭의 오프셋, 혹은 0 |
13 |
16 |
Long | 다음 우변 블럭의 오프셋, 혹은 0 |
17 |
18 |
Integer | 블럭 내 남은 공간 (기본 3040 Byte 중) |
19 |
20 |
Integer | 현재 블럭 내 알파벳 순 첫 객체명 |
21 |
22 |
Integer | 노드 내 엔트리 갯수 |
23 |
24 |
Integer | 현재 블럭 내 알파벳 순 마지막 객체명 |
33 |
FF |
Chunks | ENT* 부분 |
4. 엔트리 (가변 길이, 괄호안은 유니코드)
시작 위치 | 끝 위치 | Type |
정보 |
1 |
4 |
Char(4) | ENT* |
5 |
8 (12) |
Char(4) (CharW(4)) | PBL 버전 (0400 / 0500 / 0600) |
9 (13) |
12 (16) |
Long | 첫번째 데이터 블럭의 오프셋 |
13 (17) |
16 (20) |
Long | 객체 크기 (Net 사이즈) |
17 (21) |
20 (24) |
Long | 수정일자 (GMT +/- 0:00) |
21 (25) |
22 (26) |
Integer | 코멘트 길이 |
23 (27) |
24 (28) |
Integer | 객체명 길이 |
25 (29) |
FF |
String (StringW) | 객체명 |
5. 데이터 블럭 (512 Byte)
시작 위치 | 끝 위치 | Type |
정보 |
1 |
4 |
Char(4) | DAT* |
5 |
8 |
Long | 다음 블럭의 오프셋, 혹은 0 |
9 |
10 |
Integer | 데이터 블럭 길이 |
11 |
XXX |
Blob{} | 데이터 (최대 길이는 502 Byte) |
6. 트레일러 블럭 (in DLL/EXE), 항상 마지막 블럭 (512 Byte)
시작 위치 | 끝 위치 | Type |
정보 |
1 |
4 |
Char(4) | TRL* |
5 |
8 |
Long | 라이브러리 헤더 (HDR*) 의 오프셋 |
이후 SCC DATA, PB6/7 Status Flags, SCC DATA Chunk 에 관한 내용은 내가 쓰는 PowerBuilder 7 버전에서는 확인되지 않아서 생략.
위의 내용을 토대로 PBL 파일 내 객체, 각 객체의 소스, 검색 기능 등을 구현한 프로그램을 AutoIt 으로 작성해 보았다.
다운은 여기