亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? readme.txt

?? 反匯編delphi的.dcu文件至匯編代碼的工具的所有源代碼, 用delphi/pascal實現(xiàn), 反向工程borland delphi寫的程序必備
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
tagged records of different formats, the structure of which depend on the
tag. To analyze the structure of the record for some particular tag
we can always ask the compiler to generate as many such records as we need.

The fact, which made it very difficult to start the analysis of DCU32
files, is the extensive use of the data structures, which, by analogy with
OBJ files, I call indices. I.e. all the integer fields, which can take
more than 1 byte value, are encoded in the DCU32 file so, that 1s in the
first bits of the first byte (up to 4 bits) indicate, that additional bytes
are used to represent the value. So, the value of 0x12 is represented by one
byte with the value of 0x24, 0x1243 - two bytes: 0x0D 0x49, and so on,
and for the values which require all 4 bytes (more than 28 bits), the high
4 bits of the 1st byte are not used and filled with zeroes, and the value
is represented directly by the next 4 bytes. Subsequently, in Delphi 4.0
the 64-bit integers were introduced, to encode their values the 1st byte
takes the value of 0xFF, and the next 8 bytes represent the value.

So, the size of any data structure may differ depending on the values of
the indices contained in it, and to successfully parse the DCU32 file it is
required to detect these index fields. To do it I have written and analyzed
some test files which contain something like the following code:

const
  c1=$1;
  c12=$12;
  c123=$123;
  c1234=$1234;
  c12345=$12345;
  c123456=$123456;
  c1234567=$1234567;
  c12345678=$12345678;
  cm1=-$1;
  cm12=-$12;
  cm123=-$123;
  cm1234=-$1234;
  cm12345=-$12345;
  cm123456=-$123456;
  cm1234567=-$1234567;
  cm12345678=-$12345678;

The index field can be detected by the changes in its size and by
the fact that it often takes successive even numbers in the successive
records of the same type.

Detecting the record structure doesn't mean detecting its semantics.
The values of some indices remain uninterpreted. The criterion for
correctness is the successful parsing of the test file, without breaks
in the sequence of tagged records caused by the wrong size detected
for some record.

The results of this analysis are represented in the DCU32.rfi FlexT file.
Unfortunately, not all the information can now be represented in FlexT.
In particular, it can't represent the fact that some tagged records are
enumerated by the two number sequences: the sequence of data types and
the sequence of addresses, with the data type declaration being a member
of both sequences (the address for data type is reserved for its TypeInfo).
A lot of indices in the DCU32 records are references to addresses and data
types using these sequence numbers.

So, to completely restore the structure of DCU32 files, it was anyway
required to write the specialized program DCU32INT, which extracts almost
all the information in readable and close to Pascal syntax form. I call
this program DCU32INT and not DCU32PAS, because it is always possible
to extract an interface part of a DCU32 file, but I doesn't claim yet
that it can extract a Pascal file, which can be immediately compiled
to obtain the same DCU (a lot of work should be done to make it possible).

All the rest of the reconstruction of the DCU32 format had been done using
the DCU32INT program, but the FlexT parse results were still used when
something went wrong. The most complex thing here was to understand the
rules of assignment of the numbers in the sequence of addresses.


The Compiler Information Loss Limitations.
------------------------------------------

There are two kinds of limitations of the DCU32INT program:

1. The ones caused by some disadvantages in its implementation,
  which can be overcome later;
2. The ones caused by information loss in DCU after compiling Pascal
  source, which are inevitable.

Here we'll consider some of the latter limitations.

While converting Pascal source into DCU, Delphi compiler extracts from
source and stores into DCU only the information, which is necessary to
produce later an executable file and also, if required, a debug
information for this file. During this process the compiler performs
some simplifications, which cause information loss.

Examples:

1. Identifiers declared in implementation part and subroutines are discarded
  if the debug info checkbox doesn't checked.

2. Evaluation of expressions. Constant expressions are replaced by their
  values, so one can't determine, e.g. that CDM_FIRST = WM_USER+100,
  it will have the fixed value of $0464.
  
3. Resolution of rename types. The rename types (types, which are defined
  by declarations like THandle = integer), are replaced by their reference
  type, so all the references to the THandle type in the source code are
  replaced by the System.Integer type.
  
4. Merge of fields in the records with variants. The declaration like

  TVarRec = record
    case Byte of
      vtInteger:    (VInteger: Integer; VType: Byte);
      vtBoolean:    (VBoolean: Boolean);
    -----------------------------------------
  end;

  Is stored as

  TVarRec{88,7F9FF4C2}=record
    VInteger: Integer{F:2 Ofs:0};
    VType: Byte{F:2 Ofs:4};
    VBoolean: Boolean{F:2 Ofs:0};
    ----------------------------------
  end;

  where Ofs:_ is a field offset information. Of course, we can group
  the fields into cases according to their order and offsets (this
  capability is now supported by DCU32INT), and TVarRec is parsed as

  TVarRec=record 
    case Integer of
     0: (
       VInteger: Integer;
       VType: Byte);
     1: (
       VBoolean: Boolean);
    ----------------------------------
  end;

  But the information about the case labels is lost here completely, 
  and it can't be used, e.g. to display safely (Delphi version 
  independent) the Variant type value using the TVarData definition.

All the above mentioned limitations can be demonstrated by Delphi
browser and evaluator (those utilities are also limited by them).

So, the extracted Pascal code can cause some problems, if used in other
version of Delphi, than that, which produced the DCU.

Home page.
----------

The latest version of this program and all the related news will be available
at http://hmelnov.icc.ru/DCU/

Please, send me (e-mail: alex@icc.ru) bug reports (including the units 
which were not parsed correctly), but first check:
  1. that you have the latest version of DCU32INT,
  2. that this bug was not already reported at 
     http://hmelnov.icc.ru/DCU/FAQ.htm.


Collaboration.
--------------

If you'll create something useful using my program or information contained
in its source, or will substantially improve this program, please, send me 
your results. I'll publish all such programs, which I'll consider to be 
useful, at my site (including the links to their home pages, if available,
and/or other author information).

I can propose the following lines of improvements, which I'm not going to
develop myself in the nearest future:

1. The DCU32INT is a console application, but it would be interesting to 
  create some kind of DCU Browser as a GUI application.

2. The disassembler, which is used in DCU32INT, is rather simple, it would be 
  useful to improve it using some data flow analysis techniques.

3. The ideal final result for this kind of program would be to restore 
  completely the Pascal source from DCU. Of course this problem 
  is VERY hard. More simple problem, but still VERY hard, is to produce
  the Pascal source, where all the procedures are ASSEMBLER. The easier 
  approach is to produce assembler procedures which could have incorrect
  semantics (e.g. DB instead of some opcodes), but still could be compiled 
  to produce correct executable. Note, that the result of this kind of 
  program would be Delphi version dependent.

4. Compiler discards some names, and other information. We could create
  additional input file for DCU32INT, which could contain some additional 
  guess information for the DCU being parsed, e.g. names of unnamed local 
  variables or types, entry points in the procedure code or even additional 
  type declarations (which could be compiled using DCC32 into additional DCU
  and then extracted from it).

5. Personally, I prefer to use Delphi and not C++ Builder, but it could be 
  interesting to modify this program to enable it generate its output in 
  the close to C++ Builder syntax form (C++ syntax + Borland's extensions) 
  instead of Pascal. This program could be used to partially transfer
  programs frop Pascal to C through DCU.
  
------------------------------------------------------------------------

                             IMPORTANT NOTE:

This software is provided 'as-is', without any expressed or implied warranty.
In no event will the author be held liable for any damages arising from the
use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented, you must not
   claim that you wrote the original software.
2. Altered source versions must be plainly marked as such, and must not
   be misrepresented as being the original software.
3. This notice may not be removed or altered from any source
   distribution.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产三级久久久| 欧美性极品少妇| 久久综合一区二区| 国产精品996| 久久精品在这里| 东方aⅴ免费观看久久av| 国产日韩v精品一区二区| 成人丝袜高跟foot| 亚洲男人的天堂网| 欧美视频在线观看一区二区| 日韩电影免费在线| 亚洲精品一区二区三区福利| 国产麻豆精品视频| 中文字幕在线免费不卡| 欧美三级日韩在线| 久草精品在线观看| 国产精品超碰97尤物18| 色综合久久久久久久久久久| 丝袜美腿亚洲综合| 26uuu欧美| 97久久超碰国产精品| 午夜激情一区二区三区| 久久久久久久久久美女| 一本大道久久a久久精二百| 视频一区二区不卡| 中文一区在线播放| 欧美日韩精品一区二区在线播放| 精品一区二区三区影院在线午夜| 国产精品无人区| 欧美精品1区2区| 国产99久久久国产精品潘金| 亚洲影院在线观看| 久久亚洲影视婷婷| 欧美四级电影在线观看| 国产精品综合视频| 亚洲一区二区三区影院| 久久久影视传媒| 欧美日韩大陆在线| 91免费视频观看| 狠狠色丁香久久婷婷综合丁香| 亚洲欧洲美洲综合色网| 日韩一区二区三区电影在线观看| www.日韩精品| 国产最新精品精品你懂的| 亚洲一区二区偷拍精品| 国产女人aaa级久久久级| 欧美日韩国产精品自在自线| 岛国精品在线观看| 久久国产日韩欧美精品| 一区二区三区鲁丝不卡| 日本一区二区三区在线观看| 欧美成人女星排名| 欧美色图在线观看| 99re成人在线| 东方欧美亚洲色图在线| 久久精品国产在热久久| 性做久久久久久久免费看| 久久精品国产**网站演员| 一区二区三区美女| 亚洲欧美日韩一区二区| 欧美国产精品一区二区| 欧美精品一区二区三区蜜桃| 欧美乱妇20p| 精品视频一区三区九区| 色乱码一区二区三区88| 成人黄色电影在线| 成人免费精品视频| 国产成人鲁色资源国产91色综| 精品亚洲免费视频| 免费成人美女在线观看.| 日本三级亚洲精品| 日韩和欧美一区二区| 首页欧美精品中文字幕| 视频一区二区三区在线| 日本中文一区二区三区| 婷婷夜色潮精品综合在线| 婷婷亚洲久悠悠色悠在线播放| 午夜精品福利在线| 天堂久久久久va久久久久| 日韩在线a电影| 日本人妖一区二区| 麻豆中文一区二区| 国内外成人在线视频| 国产一区二区毛片| 国产成人精品综合在线观看| 成人av网站免费观看| 色综合久久久久综合99| 在线观看国产一区二区| 欧美男女性生活在线直播观看| 欧美嫩在线观看| 欧美va亚洲va在线观看蝴蝶网| 欧美精品一区二区三区四区| 久久久精品日韩欧美| 中文字幕巨乱亚洲| |精品福利一区二区三区| 亚洲综合偷拍欧美一区色| 污片在线观看一区二区| 久久国产夜色精品鲁鲁99| 高清不卡在线观看av| 91成人在线精品| 欧美高清视频在线高清观看mv色露露十八 | 日本伊人色综合网| 捆绑紧缚一区二区三区视频| 国产精品一区二区久激情瑜伽 | 不卡一区二区中文字幕| 一本大道久久精品懂色aⅴ| 91精品在线观看入口| 久久久久久久久久久久久夜| 亚洲色图在线看| 日本伊人色综合网| caoporn国产精品| 欧美日韩不卡一区| 国产拍欧美日韩视频二区| 一区二区在线观看视频| 久久精品国产成人一区二区三区| 国产不卡视频在线播放| 欧日韩精品视频| 久久久综合激的五月天| 亚洲一区二区三区激情| 国产一区免费电影| 欧美视频三区在线播放| 久久精品一区二区| 亚洲国产美女搞黄色| 国产一区 二区| 欧洲亚洲国产日韩| 国产午夜精品一区二区| 日韩经典中文字幕一区| av动漫一区二区| 欧美成人一区二区三区在线观看| 亚洲欧美国产毛片在线| 精品一区二区国语对白| 欧美三级中文字幕| 国产精品入口麻豆九色| 美女免费视频一区二区| 色综合久久久久久久| 欧美激情综合五月色丁香| 亚洲成人av一区二区| 99久久99久久精品免费观看| 久久综合九色综合欧美98| 五月婷婷激情综合| 色婷婷精品久久二区二区蜜臂av | 成人久久视频在线观看| 日韩一二三四区| 亚洲国产精品一区二区尤物区| 国产成人午夜精品影院观看视频| 日韩午夜av电影| 亚洲国产一区视频| 99久久免费国产| 国产喷白浆一区二区三区| 精品一区二区三区欧美| 欧美高清精品3d| 亚洲国产aⅴ成人精品无吗| 91一区在线观看| 国产婷婷色一区二区三区| 精品一区二区三区蜜桃| 日韩一区二区三区在线视频| 亚洲亚洲人成综合网络| 一本大道av伊人久久综合| 中文字幕日本乱码精品影院| 国产美女av一区二区三区| 欧美r级电影在线观看| 日韩av不卡一区二区| 91精品视频网| 蜜臀99久久精品久久久久久软件 | 欧美一区二区三区在线视频| 亚洲小说欧美激情另类| 欧美日韩一区二区不卡| 亚洲成人在线免费| 88在线观看91蜜桃国自产| 亚洲二区视频在线| 在线成人av影院| 免费成人在线网站| 欧美va在线播放| 国产剧情一区二区| 国产清纯白嫩初高生在线观看91 | 韩国欧美国产一区| 久久久久久一二三区| 国产精品一区在线| 国产亚洲欧洲一区高清在线观看| 国产一区三区三区| 国产精品美女久久久久aⅴ国产馆| 国产盗摄一区二区| 国产精品嫩草影院av蜜臀| 91毛片在线观看| 亚洲一区二区av电影| 欧美日本一区二区在线观看| 日本最新不卡在线| 久久久三级国产网站| 99精品国产视频| 亚洲国产精品综合小说图片区| 91精品国产综合久久香蕉麻豆| 久久国产日韩欧美精品| 亚洲国产激情av| 在线影视一区二区三区| 麻豆国产欧美日韩综合精品二区 | 欧美一区二区三区视频免费播放| 精彩视频一区二区三区| 国产精品传媒视频| 欧美一区二区私人影院日本| 国产很黄免费观看久久|