Announcement

Collapse
No announcement yet.

VC++ Conversion

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • VC++ Conversion

    Hallo.<p>
    Ich bin seit geraumer Zeit hier im Forum ja schon bekannt für diese Fragen: )<br>
    Wie sähe dieses Wunderwerk in Delphi aus?<p>
    <pre>
    <code>
    #define IMAGE_FIRST_SECTION( ntheader ) ((PIMAGE_SECTION_HEADER) \
    ((ULONG_PTR)ntheader + \
    FIELD_OFFSET( IMAGE_NT_HEADERS, OptionalHeader ) + \
    ((PIMAGE_NT_HEADERS)(ntheader))->FileHeader.SizeOfOptionalHeader \
    ))
    </code>
    </pre>
    <p>
    Viele Grüße,<br>
    Markus

  • #2
    So ungefaehr, aber ein paar der Sachen gehen nicht so leicht in Pascal.
    <pre>
    PIMAGE_SECTION_HEADER(
    PChar(ntheader) +
    FIELD_OFFSET(IMAGE_NT_HEADERS, OptionalHeader) +
    PIMAGE_NT_HEADERS(ntheader)^.FileHeader.SizeOfOpti onalHeader)
    </pre>
    FIELD_OFFSET ist ein Makro das den Offset von OptionalHeader in einer IMAGE_NT_HEADERS Struktur bestimmt. es koennen durchaus Fehler in mweiner Konversion sein

    Comment


    • #3
      Hi Robert.<p>
      Danke für Deine Mühe.<br>
      Ich habe gerade in den groups gegoogelt und fand ein Kommentar von Marcel van Brakel.<p>
      So wie es aussieht muss ich aus dem <b>FIELD_OFFSET</b> wohl eine Funktion machen (naheliegend).<br>
      Aber jetzt mal eine richtig peinliche Frage: das <b>PIMAGE_SECTION_HEADER</b> ist dann ein <b>packed record</b>? Ich stehe momentan auf dem Schlauch, muss mal wieder meine C-Bücher studieren...<p>
      Viele Grüße,<br>
      Marku

      Comment


      • #4
        Schwer zu sagen ohne den C header. Wahrscheinlich ja. Schau mal im C header nach. Steht dort "#include <psppack1.h>" oder so aehnlich? Die 1 im Namen heisst packing 1 = packed record

        Comment


        • #5
          Hi Robert.<p>
          Naja, <b>#include "pshpack1.h"</b> konnte ich finden.<br>
          Der C header sollte übrigens nicht unbekannt sein, der Auszug oben stammt aus <i>WINNT.h</i>. Wurde der vielleicht schonmal übersetzt? => Jedis?<p>
          Viele Grüße,<br>
          Marku

          Comment


          • #6
            Nachtrag: WINNT.h wurde von Marcel van Brakel übersetzt, aber gerade mein Problem hat er ausgelassen <p>
            Marku

            Comment


            • #7
              <pre><b>function</b> FieldOffset(<b>const</b> Struc; <b>const</b> Field): Cardinal;
              <b>begin</b>
              Result := Cardinal(@Field) - Cardinal(@Struc);
              <b>end</b>;</pre>
              <p>
              <pre><b>function</b> ImageFirstSection(NtHeader: PImageNtHeaders): PImageSectionHeader;
              <b>begin</b>
              Result := PImageSectionHeader(Cardinal(NtHeader) +
              FieldOffset(NtHeader^, NtHeader^.OptionalHeader) +
              NtHeader^.FileHeader.SizeOfOptionalHeader);
              <b>end</b>;</pre>

              - nic

              Comment


              • #8
                Nico, nochmals Danke!<br>
                Ich zähle mich nun auch zu den Leuten wie Mathias Simmack und Michael Puff (du weißt was ich meine ;-)).<p>
                Gruß,<br>
                Marku

                Comment

                Working...
                X