cs
'dur. cs:ip
, yani cs
ip
(talimat işaretçisi) ile birlikte bir sonraki talimatın yerini gösterir. Bu nedenle, cs
veya ip
numaralı herhangi bir değişiklik veya her ikisinde de bir sonraki talimatın getirileceği ve çalıştırılacağı adresi değiştirir.
Genellikle, retf
, int3
, int
veya iret
bir jmp
(uzun atlama) ile cs
, call
(uzun arama) değiştirin. 8088 ve 8086 pop cs
da kullanılabilir (opcode 0x0F). pop cs
, 186 + 'da çalışmayacaktır, burada opcode 0x0F, çok baytlı talimatlar için ayrılmıştır. Uzun atlama veya uzun aramada doğal olarak tehlikeli hiçbir şey yoktur. Sadece zıpladığınız veya çağıracağınız yeri bilmeniz ve korunan modda bunu yapmak için yeterli ayrıcalıklara sahip olmanız gerekir. 16-bit gerçek modda (örn. DOS), örneğin istediğiniz her şeyi atlayabilir ve arayabilirsiniz. jmp 0xF000:0xFFF0
, cs
- 0xF000
ve ip
- 0xFFF0
adreslerini ayarlar; bu, BIOS kodunun başlangıç adresidir ve bu nedenle bilgisayarı yeniden başlatır. Farklı bellek adresleri farklı kodlara sahiptir ve bu nedenle farklı sonuçlara neden olur, teoride mümkün olan her şey olabilir (sabit sürücü, geçerli kayıt ve/veya yığın değerleri ile biçimlendirmek için kullanılan BIOS koduna atlarsanız, sabit sürücü biçimlendirilir 'talep edildiği gibi'). Pratikte, jmp
'ler ve call
' un çoğu adreste olması, büyük olasılıkla geçersiz opcode veya başka bir istisna (sıfıra bölme, taşma bölme, vb.) Ile sonuçlanır.
'CS' = kod parçası. Değişen bir sapkın "jmp" ile (bir anlamda) eşdeğer olduğunu varsayalım. – valdo
Bu belge oldukça güvenilir görünmüyor: "CS'YI DEĞİŞTİRMEYİN!", Ancak CS'yi şöyle okuyabilirsiniz: "mov ds, cs", "CS" değerini "D" ye getirin. Eh, x86'da mov ds, cs ya da başka bir “mov segreg, segreg” gibi bir talimat yoktur. 'Cs 'değerini okumak için' mov reg, cs; mov ds, reg' ('' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''; pop ds'. Dahası, eğer * hiç * değiştirmemeye karar verirseniz, tüm kesintili çağrılar söz konusu değildir (örn. BIOS, DOS ve Linux servisleri). http://web.itu.edu.tr/kesgin/mul06/intel/instr/mov.html – nrz
@nrz: "Uzak" çağrılarıyla erişilebilen "Linux hizmetleri" diye bir şey yoktur (bunlar arasında kesintiler/syscalllar farklı şekilde çalışır; ', _caller_, 'cs' hedefinin ne olacağını kontrol edemez, IDT girişlerini/syscall msrs kurarken işletim sistemi tarafından karar verilir. Ack, 'cs' _can_ ile değiştirilebilir, sadece hedef kod segmenti bulunmadığı ve "eip" hedefine ulaşılacağı şekilde ayarlanmadığı sürece, böyle bir çağrı bir # # GP' hatasına neden olur ve Uygulama iptal olacak. –