Cita-cita saya adalah:
- Diberikan utas yang ditangguhkan dalam program Windows 32 atau 64-bit yang dikompilasi Delphi, untuk berjalan di tumpukan (dapat dilakukan)
- Diberikan entri tumpukan, untuk menghitung variabel lokal di setiap metode dan nilainya. Yaitu, paling tidak, temukan alamat dan jenisnya (integer32 / 64 / signed / unsigned, string, float, record, class ...) yang kombinasinya dapat digunakan untuk menemukan nilainya.
Yang pertama baik-baik saja dan yang kedua tentang pertanyaan ini. Pada tingkat tinggi, bagaimana Anda menghitung variabel lokal yang diberi entri tumpukan di Delphi?
Pada tingkat rendah, inilah yang telah saya selidiki:
RTTI: tidak mencantumkan informasi semacam ini tentang metode. Ini bukanlah sesuatu yang sebenarnya pernah saya anggap sebagai pilihan yang realistis, tetapi tetap mendaftar di sini.
Informasi debug: Memuat info debug yang dihasilkan untuk build debug.
- File peta: bahkan file peta terperinci (file format teks! Buka satu dan lihat) tidak berisi info variabel lokal. Ini pada dasarnya adalah daftar alamat dan nomor baris file sumber. Cocok untuk korelasi alamat ke file & baris, misalnya titik biru di selokan; tidak bagus untuk informasi yang lebih detail
- Informasi debugging jarak jauh (file RSM) - tidak ada informasi yang diketahui tentang konten atau formatnya.
- File TD32 / TDS: penelitian saya saat ini. Mereka mengandung simbol global dan lokal di antara banyak informasi lainnya.
Masalah yang saya hadapi di sini adalah:
- Tidak ada dokumentasi format file TD32 (yang dapat saya temukan.)
- Sebagian besar pengetahuan saya tentang mereka berasal dari kode Jedi JCL yang menggunakannya (JclTD32.pas) dan saya tidak yakin bagaimana menggunakan kode itu, atau apakah struktur di sana cukup luas untuk menampilkan vars lokal. Saya cukup yakin ini akan menangani simbol global, tetapi saya sangat tidak yakin tentang lokal. Ada berbagai macam konstanta yang ditentukan dan tanpa dokumentasi untuk formatnya, untuk membaca apa artinya, saya masih menebak-nebak. Namun, konstanta tersebut dan namanya pasti berasal dari suatu tempat.
- Sumber yang dapat saya temukan menggunakan info TDS tidak memuat atau menangani simbol lokal.
Jika ini adalah pendekatan yang benar, maka pertanyaan ini menjadi 'Apakah ada dokumentasi untuk format file TDS / TD32, dan apakah ada contoh kode yang memuat variabel lokal?'
Contoh kode tidak penting tetapi bisa sangat berguna, meskipun sangat minim.