[-] שימוש ב- Fgets
by shakedkr - Sunday, 22 May 2016 01:29:12
נשמח לעזרה בשימוש של הפונקציה fgets:
אנחנו מנסים להשתמש בפונקציה באופן הבא: 
push 0
push 80
push input
call fgets
add esp, 12
אבל נתקלים ב- segfault. 
מה אנחנו עושים לא נכון כאן?

ניסינו למשל להשתמש ב- gets כך:
push input
call gets
add esp, 4
וזה עובד בצורה תקינה

תודה מראש
[-] Re: שימוש ב- Fgets
by avivbr - Sunday, 22 May 2016 21:08:10
נסו ככה:
push dword [stdin] (אחרי שכתבתם extern stdin)
push dword 80
push input
call fgets

צריך דיוורד 80 כי הפונקציה הזו מצפה לקבל אינט, והגודל של אינט זה 4 בייטים, כלומר דאבל וורד.
לגבי למה השימוש באסטידיאין הוא עם סוגריים ודיוורד גם כן...
לא יודע. ^_^'
[-] Re: שימוש ב- Fgets
by shakedkr - Monday, 23 May 2016 12:06:24
עדיין לא עובד ככה :\ כלומר אין seg fault אבל יש תוצאות משונות
יש עוד משהו שצריך להוסיף\לשנות?
Re: שימוש ב- Fgets
by shimony - Tuesday, 24 May 2016 18:12:21
Well, it should work. E.g. the following worked (with obvious definitions and externs) in my test just now:

       push dword [stdin]
       push dword 10
       push msg
       call fgets
       add  esp, 12

And the [stdin] in parenthesis is of course because you need to pass the VALUE of the stdin variable (which is a pointer to FILE *) to fgets.

So you must be doing something ELSE wrong (such as not saving registers, or some memory violation, etc.)