PDA

Tam Sürümünü Görmek İçin : C ile Aktif Bir işlem sürecine müdahale etme


x1bx00x0a
10/05/2007, 19:29
Merhaba Ceviz ailesi.
C dili ile Aktif bir processin bellek alanına müdahale ederek farklı şekilde çalışmaya nasıl zorlayabilirim ?
Bir Örnek ile açıklarsak.
Mozilla Firefox uygulaması sistemimizde çalışıyor olsun. Bizim yazdığımız uygulama ile firefox'a müdahale edip farklı şekilde çalışmasını nasıl sağlayabiliriz?

Bağlantılı olan diğer sorular ?
1. Etkin sürecin bulunduğu bellek alanını nasıl bulabilirim ?


acehreli
10/05/2007, 20:24
Modern isletim sistemleri buna izin vermezler. Senin islemin kendi alani disina ciktigi icin sonlandirilir. Programlar arasinda bilgi alisverisi icin cok cesitli yontemler var. Bunlari "interprocess communication" basliginda bulabilirsin. Turkce kaynak bilen var mi?

Modern isletim sistemlerinde 'virtual memory' var. Senin surec, kendisini sanki butun bellegin sahibiymis gibi gorur. (Ama tabii once o bellegi ayirmasi (new ile, malloc ile, vs.) gerekir.)

Dolayisiyla birden fazla process kendilerini 0x1000 adresine sahip sanabilirler. O adres ise zaman icerisinde aslinda "gercek bellegin" cesitli yerlerinde dolasabilir. Hatta bazen o bellek diske bile yazilabilir.

Ali

Sabahi
11/05/2007, 06:15
Modern isletim sistemleri buna izin vermezler. Senin islemin kendi alani disina ciktigi icin sonlandirilir.

Bu yazdiginiz iki alakasiz process'ten birinin bir diger process'in hafizasina yazmaya calistigi durumlar icin gecerli olabilir. Fakat bu kesinlikle hedefledigimiz bir process'in bellek alanina ulasmamiza engel degil. Basta Windows olmak uzere gunumuzun cogu isletim sistemi icin bu mumkun.

http://www.linuxjournal.com/article/6100
http://rentzsch.com/papers/overridingMacOSX

Mozilla Firefox uygulaması sistemimizde çalışıyor olsun. Bizim yazdığımız uygulama ile firefox'a müdahale edip farklı şekilde çalışmasını nasıl sağlayabiliriz?
Isletim sistemine ve amaciniza bagli olarak cesitli yontemler kullanmak mumkun. Ancak bu tur programlar genel olarak bu forumun ilkelerine aykiri amaclarla yazilip, kullanilmak istenildiginden fazla detaya girmek isime gelmiyor dogrusu.

mr_c
11/05/2007, 18:39
Mümkün sanırım. Bu konuya benzer bir konuyu genel programlama, sesle kalvye kontrolü konusunda tartışmıştık.

http://forum.ceviz.net/sesle-klavyeyi-kontrol-etmek-mumkun-mu-t33716p4.html?highlight=sesle+klavye+kontrol%FC

link çalışmazsa forumda aratabilirsiniz bu yöntemler windows için geçerli linux ta da denemek gerekli.

Yani programlar bellekte tek başlarına çalıştırıldıklarına inandırılırlar aslında böyle birşey mümkün değil, dolayısıyla işletim siteminin kullandığı yolları kullanarak aynı bellek bölgelerine ulaşmak mümkün.

x1bx00x0a
11/05/2007, 19:15
Bu yazdiginiz iki alakasiz process'ten birinin bir diger process'in hafizasina yazmaya calistigi durumlar icin gecerli olabilir. Fakat bu kesinlikle hedefledigimiz bir process'in bellek alanina ulasmamiza engel degil. Basta Windows olmak uzere gunumuzun cogu isletim sistemi icin bu mumkun.

http://www.linuxjournal.com/article/6100
http://rentzsch.com/papers/overridingMacOSX


Isletim sistemine ve amaciniza bagli olarak cesitli yontemler kullanmak mumkun. Ancak bu tur programlar genel olarak bu forumun ilkelerine aykiri amaclarla yazilip, kullanilmak istenildiginden fazla detaya girmek isime gelmiyor dogrusu.
Öncelikle sorumu anlayıp oldukça anlaşılır bir cevap verdiğin için teşekkür ederim.

Bilginn kullanılış amacı ne olursa olsun bilgi saklamanı kınıyorum =)


@mr_c Verdiğin Link Veritabanı hatası veriyor. Muhtemelen kayıtlardan silinmiş bir veri olabilir.

DipNot: Amacıma gelince bellekte bulunan tüm işlemlerin o anki görüntülerini görüntülemek istiyorum. Ve bazılarınında akışını değiştirmek.

mr_c
11/05/2007, 19:24
Silinmemiş link yerine genel programlama forumunda sesle klavye kontrolü şeklinde aratırsan bulabilirsin. Az önce baktım. Türkçe kaynağa da link var o konuda. Muhtemelen formdaki kimlik denetimiyle ilgili bir problem. Son sayfada yazdıklarımı bulabilrsen ve bu linkten ilgili kısmı okursan biraz faydası dokunabilir.

http://www.csystem.org/downloads.php

x1bx00x0a
11/05/2007, 19:39
Silinmemiş link yerine genel programlama forumunda sesle klavye kontrolü şeklinde aratırsan bulabilirsin. Az önce baktım. Türkçe kaynağa da link var o konuda. Muhtemelen formdaki kimlik denetimiyle ilgili bir problem. Son sayfada yazdıklarımı bulabilrsen ve bu linkten ilgili kısmı okursan biraz faydası dokunabilir.

Evet verdiğin başlığı inceledim. Pek detaylı olmasada konu üzerinde durulmuş. Ama bu kaynağın benim için yeterli olmadığı düşüncesindeyim.
Bu arada Yapmak istediğim şey Bir kontrol mekanizması kurmak.

mr_c
11/05/2007, 19:53
Evet temel çerçeveyi anlatmak bakımından verdim içinde geçen kısımları detaylandıralım. Proses ID ler ve Prosesin ID lerinin ne anlma geldiğini anladıysan Prosesin ID si ile ilgili bellek alanını adresini alabileceğin apilerin neler olduğunu biraz farketmişsindir. Bellek adreslerini alabilceğin fonksiyonlardan orada değindim mi bilmiyorum. Yoksa bi sdk kurup bakayım tam API adlarını listelerim daha sonra.

Daha sonra olayları yakalamak gerekli en azından bir prosesin başlaması bitmesi yada bir wndprocedure çağırması gibi. Bunu yakaladıktan sonra bu kodu kendi istediğimiz kodla değştirebiliriz.

Olayı yakalamak konusunda farklı yaklaşımlarda bulunuyoruz. Bir konuda şuan tartışıyoruz hook mu kullanalım, event notification mı diye kendin uygun yöntemi seçip kendin karar verirsin. Daha fazla detaylandırmaya çalışayım zamanım yettiğince.

x1bx00x0a
11/05/2007, 20:08
Event notification diye bahsettiğin garip şeyi ilk defa duymakla beraber bu mesajı yazarken bir yandanda ne olduğunu araştırmaya çalışıyorum. Bu arada eğer sende hook ile arasındaki farkları avantajları dezavantajları yazarsan minnettar kalırım..

mr_c
11/05/2007, 20:11
Şimdi Genel programlama bölümüne bakarsan aktif konuda onu tartışıyoruz. Dezavantajalrını avantajlarını orda değerlendirelim

Euclides
11/05/2007, 20:12
aslında hadise o kadar basit değil, ya program kendi hafızasını koruyorsa ? yada hafızasını gizliyorsa ?

x1bx00x0a
11/05/2007, 20:14
aslında hadise o kadar basit değil, ya program kendi hafızasını koruyorsa ? yada hafızasını gizliyorsa ?
Önce bi ne olduğunu, nasıl çalıştığını, mantığını öğrenelim gerisi anlamak daha kolay olur. Neyse ben genel programlamaya gidiyorum... orada kavramları öğreneyim geri geleceğim...