Logo

רד-בורד: ארכיון

ראשי > תיכנות > מה הבעיה בקוד (C)

05/04/2007 16:50:37 devil kide
כתבתי קוד מאוד פשוט בC , המטרה של הקוד לקלוט ממני מספר ואז לעבור על כל התאים בזיכרון ולהגיד לי באיזה תא המספר שהכנסתי נמצא (רציתי להכין מין טריילר למשחק מסויים, ואני חייב לדעת באיזה מקום נמצא המידע).
בכל מקרה, הקוד התקמפל בצורה טובה, אבל הוא לא מבצע את העבודה.
התוכנית נסגרת בכל ריצה "שלח\אל תשלח" המפרוסם של חלונות.
יכול להיות ש windows מגן על התאים ולא נותן לי לקרוא מהם?
האם יש דרך לקרוא מהתאים?

זה הקוד:

קוד:#include <stdio.h>
void main(){
int num,ret=1;
unsigned long *pointer,t;
while (ret){
printf ("please insert number \n");
scanf ("%d",&num);
//&#233;&#249; &#236;&#233; 256 &#238;&#226;&#228; &#225;&#230;&#233;&#235;&#248;&#229;&#239;, &#225;&#226;&#236;&#236; &#230;&#228;
//256*1024
for (pointer=0;pointer<=256*1024;pointer++)
if (*pointer==num)
printf ("found: %d\n",&pointer);
printf ("\n\n agin?");
scanf("%d",ret);
}
}




תודה מראש.
06/04/2007 18:59:25 Hypathia
באופן עקרוני.... התוכנית שלך לא תרוץ כמו שצריך.

שתי נקודות למחשבה:
1. הפרוסס של התוכנית שלך מקבל כמות מסויימת של זכרון וירטואלי הקטן מ256 מגה, וממספר אותו בצורה שונה (הכתובות שאתה עובד איתן אינן הכתובות המקוריות). לכן כאשר תחרוג מהתחום של הזכרון המוקצה, התוכנית שלך תקרוס.

2. אתה מגדיר פויינטר מסוג unsigned long. לטיפוס הזה יש גודל 4 בייטים, ובאופן מקרי גם להגודל של int הוא 4 בייטים. נראה שבחירת הטיפוס אליו מצביע הפויינטר הוא שרירותי מבחינתך. אז באופן פרקטי הגדרה כזו תקינה, אך באופן תאורטי היא קצת בעייתית. כי כל פעם שאתה מגדיל את הפויינטר שלך, הוא מדלג את מספר הביטים בהתאם לטיפוס שלו. אם ברצונך לעבוד עם כתובות עוקבות, הגדר אותו במצביע לCHAR.


עלה והצלח!
:PPP
07/04/2007 15:31:32 HLL
להרחיב את מה שיפתחיה אמרה ב 1.
לכל תוכנית בסביבת חלונות יש ’מפת זיכרון’ המוגדרת בקובץ הכותר של התוכנית PE.
בזמן טעינת התוכנית, חלונות טוען את החלקים הממופים במפה(הידועים גם בשם, Segments) אל המיקום המתאים, ע"פ אותה מפה. ניתן להשיג את כל הנתונים הללו באמצעות WIN32 API, וכן קריאת ה PE של הקובץ (ניתן לעשות את זה ישירות מהזיכרון. לא נדרש לקרוא את הקובץ מהכונן)
07/04/2007 20:33:19 devil kide
רגע, אם אני יוצא מהאיזור של הסגמנטים שאני מקבל, התוכנית, ברמה עקרונית עלולה לקרוס?

חיפשתי בנט קצת שמידע על זה, והבנתי שיש שיטה לעשות את זה בצורה שונה,שהתוכנית שאני רוצה לחפש את המשתנים שלה יהיו כאילו תחת התוכנית שלי (מין תוכנית בת כזאת) , המידע שמצאתי היה בVB מישהו יודע איך יקראו לזה ב C ?


אני יעלה ויצליח :D
08/04/2007 13:24:34 HLL
Child process...
תאמת, אני לא ככ יודע מה ההבדל בין זה לבין פרוסס אח...
הרי בחלונות הכל פרוץ והכל נגיש ... אין בעיה לגשת במכוון לזיכרון שלא שלך ^_^
08/04/2007 16:47:56 devil kide
לעזאזל עם ספריית איתן, שעה אני קורא (הוא קרא לפונקציה frok) בסוף אני רואה שזה בפרל :(.
הלל, יש’ך לכוון אותי לחומר טוב(חומר לבן)?


עריכה: הבנתי שאם אני יריץ את זה תחת הפונקציה system זה ירוץ עם משתנים של התוכנית שלי, אני צודק?

[ההודעה נערכה על-ידי devil kide ב-08/04/2007 16:50:30]
10/04/2007 01:58:07 HLL
אם אתה מדבר על Enviromental variables, Working folder, רמת הרשאה וכו’ אז כן.
אבל בשביל זה יש CreateProcess ... (WIN32API)
עמודים: 1