Bir .sys sürücüsünü derlemeye çalışırken Ghidra'yı kullanıyordum. Biraz acemiyim ama yardım alıyorum. Derleyicinin çok sayıda "yapı" ürettiğini görüyorum (kod tuhaf veya anlaşılması zor). En azından bazı işlevlerin işlevselliğini gördükten sonra yeniden adlandırdım. Bir noktada bu artefaktların çoğundan kurtulamadığım için (genellikle bazı değişkenlerde doğru türleri ayarlayarak) başka bir derleyiciyi denemeye karar verdim: JEB Community Edition (PNF Yazılımından). Ghidra'dan daha iyi derlenmiş kod çıktısı veriyor gibi görünüyor, Ghidra'dan çok daha fazla türü de algılıyor, ancak şimdi aşağıdakiyle duvara tosladım. Ghidra'da şu şekilde yeniden adlandırdığım bir fonksiyonum var:
int FUN_10001ea0(void)
{
EnumerateAndProcessPCIDevices(ProcessMatchingPCIDevice);
return 0;
}
ProcessMatchingPCIDevice (aynı zamanda yeniden adlandırıldı) da bir işlev gibi görünüyor, çünkü ona çift tıklıyorum ve beni işleve gönderiyor. Ancak JEB ayrıştırma sonucunda durum böyle değildir. Bakmak:
int sub_10001EA0() {
sub_10001A40(&gvar_10001E10);
return 0;
}
Bazı nedenlerden dolayı onu sadece global bir değişken olarak algılıyor. Çift tıklayın ancak yalnızca Disassembly'deki beyanı gösterir.
JEB'de Ghidra'nın sahip olduğu herhangi bir eksik analiz veya işlevsellik var mı?
int FUN_10001ea0(void)
{
EnumerateAndProcessPCIDevices(ProcessMatchingPCIDevice);
return 0;
}
ProcessMatchingPCIDevice (aynı zamanda yeniden adlandırıldı) da bir işlev gibi görünüyor, çünkü ona çift tıklıyorum ve beni işleve gönderiyor. Ancak JEB ayrıştırma sonucunda durum böyle değildir. Bakmak:
int sub_10001EA0() {
sub_10001A40(&gvar_10001E10);
return 0;
}
Bazı nedenlerden dolayı onu sadece global bir değişken olarak algılıyor. Çift tıklayın ancak yalnızca Disassembly'deki beyanı gösterir.
JEB'de Ghidra'nın sahip olduğu herhangi bir eksik analiz veya işlevsellik var mı?