برای اضافه کردن یک کاراکتر به انتهای رشته شاید افراد به اینصورت عمل کنند :
string[ strlen(string)]=char;
امّا من خواستم بدون وابسته بودن این قسمت به libc؛ این عمل انجام شود به اینصورت عمل کردم :
int main (void){/* Define variable */char c ='m';char* string = NULL;/* Allocating memory */
string = malloc(7);/* Copy char into `string` */
strcpy(string,(char*)"ghase");/* Append `c` to end of `string` */*((char*)(&string +1)-2)= c;*((char*)(&string +1)-1)='\0';/* Result */
printf("%s\n", string);return EXIT_SUCCESS;}
امّا با سیگنال SIGSEGV در تابع __strlen_sse2() هنگام فراخوانی printf() مواجه میشوم، کلاً حافظهٔ دریافتی از طریق Derefrence کردن string مقادیرش قابل دسترسی نیست (پیغامی که GDB نشان میدهد). ولی همچنان میتوانم بهاینصورت به مقداردهی که کردهام دسترسی داشتهباشم :
printf("%c\n",*((char*)(&string +1)-2));
الآن چه اتفاقی برای حافظهٔ متغیر string میافتد ؟
ویرایش شده در توسط قاسم رمضانی منش تصحیح حالت رنگآمیزی کدها.
درود بر دوستان عزیز؛
برای اضافه کردن یک کاراکتر به انتهای رشته شاید افراد به اینصورت عمل کنند :
امّا من خواستم بدون وابسته بودن این قسمت به libc؛ این عمل انجام شود به اینصورت عمل کردم :
امّا با سیگنال SIGSEGV در تابع __strlen_sse2() هنگام فراخوانی printf() مواجه میشوم، کلاً حافظهٔ دریافتی از طریق Derefrence کردن string مقادیرش قابل دسترسی نیست (پیغامی که GDB نشان میدهد). ولی همچنان میتوانم بهاینصورت به مقداردهی که کردهام دسترسی داشتهباشم :
الآن چه اتفاقی برای حافظهٔ متغیر string میافتد ؟
ویرایش شده در توسط قاسم رمضانی منشتصحیح حالت رنگآمیزی کدها.
به اشتراک گذاری این ارسال
لینک به ارسال
به اشتراک گذاری در سایت های دیگر