Портал освітньо-інформаційних послуг «Студентська консультація»

  
Телефон +3 8(066) 185-39-18
Телефон +3 8(093) 202-63-01
 (093) 202-63-01
 studscon@gmail.com
 facebook.com/studcons

<script>

  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){

  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

 

  ga('create', 'UA-53007750-1', 'auto');

  ga('send', 'pageview');

 

</script>

Дизасемблювання TPU, TPP, TPW модулів, написаних на Паскалі

Тип роботи: 
Курсова робота
К-сть сторінок: 
82
Мова: 
Українська
Оцінка: 

  aux:=obj_list;

      obj_list:=obj_list^.next;
      dispose(aux);
    end;
  end;
 
  procedure ReadPathFile(var path:string;var Header:header_ptr);
  var dir,unit_dirs:string;
      i:integer;
  begin
    header:=nil;
    read_file(path,pointer(header),0,sizeof(header^));
    if header = nil then
    begin
      unit_dirs:=uses_path;
      while (unit_dirs<>'') and (header=nil) do
      begin
        i:=pos(';',unit_dirs);
        if i=0 then
          i:=length(unit_dirs)+1;
        dir := copy(unit_dirs,1,i-1);
        unit_dirs := copy(unit_dirs,i+1,255);
        if dir[length(dir)] <> '\' then
          dir := dir + '\';
        read_file(dir+path,pointer(header),0,sizeof(header^));
      end;
      if header<>nil then
        path:=dir+path;
    end;
  end;
 
  procedure add_unit(const objname:string;info : unit_ptr);
  var
    size,total:word;
    header:header_ptr;
    unit_obj:obj_ptr;
    junk : pointer;
    obj_info : unit_ptr;
    info_ofs,offset : word;
    tpl_item : tpl_item_ptr;
 
  procedure load_buffer;
  var i:integer;
  begin
    with unit_list[num_known]^ do
    begin
      path := objname+unit_ext;
      ReadPathFile(path,header);
      if header <> nil then
      begin
        if header^.file_id <> tpu_file_id then
        begin
          HaltError('Error:  file '+path+' is not a TP '+
{$IFDEF UNIT60}
           '6.0'
{$ELSE}
           '7.0'
{$ENDIF}
                   +' .TPU file!');
        end;
        read_file(path,pointer(buffer),0,header^.sym_size);
        if buffer <> nil then
        begin
          has_symbols := true;
          header:=header_ptr(buffer);
        end;
        exit;
      end;
      path := '';
      tpl_item := tpl_buffer.first;
      while tpl_item<>nil do
      begin
        header := header_ptr(tpl_item^.buffer);
        if (header^.file_id <> tpu_file_id) then
        begin
          HaltError('Error searching '+tpl_name+'.  It is not a TP library!');
        end;
        unit_obj := add_only_offset(header,header^.ofs_this_unit);
        if upper(unit_obj^.name) = upper(objname) then
        begin
          buffer := pointer(header);
          has_symbols := true;
          exit;
        end;
        tpl_item:=tpl_item^.next;
      end;
      WriteOutput('Warning:  Can''t find unit '+objname);
    end;
  end;
 
  var
    existing : unit_list_ptr;
    D: DirStr;
    N: NameStr;
    E: ExtStr;
  begin
    existing := get_unit_by_name(objname);
    if existing <> nil then
      with existing^ do
      begin
        if   (info <> nil)
         and (existing^.buffer <> nil)
         and (checksum <> info^.checksum) then
        begin
          writeln('Warning:  checksum for unit ',name,' is ',hexword(checksum),' in ',
                  path);
          has_symbols := false;
          freemem(buffer,header^.sym_size);
          buffer := nil;
        end;
        exit;
      end;
 
    inc(num_known);
    new(unit_list[num_known]);
    with unit_list[num_known]^ do
    begin
      name := upper(objname);
      obj_list := nil;
      proc_list := nil;
      buffer := nil;
      has_symbols := false;
      load_buffer;
      if has_symbols then
      begin
        FSplit(name, D, N, E);
        name:=N;
        own_record := header_ptr(buffer)^.ofs_this_unit;
       
Фото Капча