X86_64 derleme kodundan C çağrısına çağrı çağrısını kullanarak ve diğer çağrı kurallarıyla bir aramayı sağlayan bir arabirim (örneğin, bir sarıcı) yapıyorum. En iyi şey, "derleyici bağımsız" olmaktır (sarıcıyı değiştiren juste), bu yüzden derleyicide geri yığınlar/yığın şeyler koyan bir şey arıyorum. Zaten buraya baktım: Custom calling convention for P/Invoke and C# ve yapmam gerekenden çok yakın. Şu anda, GCC kullanıyorum ama diğer derleyicilerden ipuçları bekliyoruz!Özel X86_64 C işlev çağrısı için çağrı çağrısı
Yani, burada bir şey sorunun en iyi görünüm için, olduğu (özel kodlama kuralı garip):
pushq %r11 # saves r11 for call
movq 64bits_address %r11 # move a 64 bits address that points on a data structure
callq *8(%r11) # calls an address in the data structure
popq %r11 # restores %r11 ; return value is in the structure
Ben "özel" (sarıcı) C işlevi çağırmak için gerekiyor ; Burada iş diğer C işlevleri arasında çağrı göndermek olacaktır. Bu yüzden bu paketin% r11'i bulması, tüm kayıtları kaydetmesi ve daha fazla çağrı için yığını hazırlaması gerekiyor. Bunu C dilinde yapmak için uygun bir yol var mı?
Teşekkür kuralları çağıran ve nasıl ilgili belgeler için bir sürü
Visual C++, derleyicinin prologue ve epilogue oluşturmasını engelleyen bir '__declspec (çıplak)' değiştiricisine sahiptir. X64 hedefleri (ve satır içi montaj da) için derleme sırasında –
__declspec (çıplak) desteklenmez. – Andrey