Integer Overflows/UnderflowsThis page was marked to be reviewed for de dịch - Integer Overflows/UnderflowsThis page was marked to be reviewed for de Việt làm thế nào để nói

Integer Overflows/UnderflowsThis pa

Integer Overflows/Underflows

This page was marked to be reviewed for deletion.


#REDIRECT Integer_overflow

Last revision: 06/3/2009



Description
Integer overflow belongs to a logic errors family. It occurs when a given range of int (integer) type numbers is overflowed due to arithmetic operations. Generally there are only two operations which cause these kind of errors - addition and multiplication.


Risk Factors
TBD

Examples
Example 1 (addition)

rezos@bezel ~/labs/integer $ cat add.c
#include
#include

int main(void)
{
int a;

// a=2147483647;
a=INT_MAX;

printf("int a (INT_MAX) = %d (0x%x), int a (INT_MAX) + 1 = %d (0x%x)
", a,a,a+1,a+1);

return 0;
}

rezos@bezel ~/labs/integer $ ./add
int a (INT_MAX) = 2147483647 (0x7fffffff), int a (INT_MAX) + 1 = -2147483648 (0x80000000)
By adding 1 to the biggest possible signed (+ or -) integer value we overwrite the sign bit. In short, by adding two positive numbers we get one big negative number.


Example 2 (multiplication)

rezos@bezel ~/labs/integer $ cat multiplication.c
#include
#include
#include
#include

int main(int argc, char **argv)
{
int i, j, z=0x00000001;
char *tab;

if(argc0) {
tab = malloc(i * sizeof(char *));
if(tab == NULL) _exit(2);
}

for(j=0; j
0/5000
Từ: -
Sang: -
Kết quả (Việt) 1: [Sao chép]
Sao chép!
Integer Overflows/UnderflowsThis page was marked to be reviewed for deletion.#REDIRECT Integer_overflowLast revision: 06/3/2009DescriptionInteger overflow belongs to a logic errors family. It occurs when a given range of int (integer) type numbers is overflowed due to arithmetic operations. Generally there are only two operations which cause these kind of errors - addition and multiplication.Risk FactorsTBDExamplesExample 1 (addition)rezos@bezel ~/labs/integer $ cat add.c#include #include int main(void){ int a;// a=2147483647; a=INT_MAX; printf("int a (INT_MAX) = %d (0x%x), int a (INT_MAX) + 1 = %d (0x%x)
", a,a,a+1,a+1); return 0;}rezos@bezel ~/labs/integer $ ./addint a (INT_MAX) = 2147483647 (0x7fffffff), int a (INT_MAX) + 1 = -2147483648 (0x80000000)By adding 1 to the biggest possible signed (+ or -) integer value we overwrite the sign bit. In short, by adding two positive numbers we get one big negative number.Example 2 (multiplication)rezos@bezel ~/labs/integer $ cat multiplication.c#include #include #include #include int main(int argc, char **argv){ int i, j, z=0x00000001; char *tab; if(argc<2) _exit(1); i=atoi(argv[1]); if(i>0) { tab = malloc(i * sizeof(char *)); if(tab == NULL) _exit(2); } for(j=0; j tab[j]=z++; for(j=0; j printf("tab[j]=0x%x
", tab[j]); return 0;}rezos@bezel ~/labs/integer $ ./multiplication 1073741824Segmentation faultThe program should write a "z" value into the array of pointers and then print it out. With a specially selected array size (number of its elements) it's possible to use an integer overflow error to overflow the array "tab".The example below explains why it happens.rezos@bezel ~/labs/integer $ cat multi.c#include int main(void){ printf ("1073741824 *4 = %d
", 1073741824 * 4); return 0;}In this program we multiply 1073741824 * 4 because sizeof(char *) will return 4.rezos@bezel ~/labs/integer $ gcc -ggdb multi.c -o multimulti.c: In function 'main':multi.c:6: warning: integer overflow in expressionThe compiler warns us that the program contains an expression which causes an integer overflow. To make sure what the result of the multiplication will be:rezos@bezel ~/labs/integer $ ./multi1073741824 *4 = 0malloc(0) (in the main example) will allocate memory with size 0 correctly(poprawnie)/successfully(z powodzeniem), and that will allow for overwriting memory segments on the heap.Memory allocation with a negative value may cause allocation of very small or very big memory segments depending on the implementation of the *alloc() functions. Integer overflow errors may also lead to the situation where condition statements, which are supposed to check buffers boundaries, are omitted.Integer overflow errors are not always a threat themselves. However they provide the possibility to overwrite or to read memory content beyond boudries of the buffers, for example during buffer indexing.
đang được dịch, vui lòng đợi..
Kết quả (Việt) 2:[Sao chép]
Sao chép!
Integer Overflows / underflows Trang này đã được đánh dấu để được xem xét để xóa. #REDIRECT Integer_overflow sửa đổi cuối: 2009/06/03 Mô tả Integer overflow thuộc về một gia đình lỗi logic. Nó xảy ra khi một phạm vi nhất định của int (số nguyên) gõ số được tràn do phép tính số học. Nói chung chỉ có hai hoạt động đó gây ra các loại lỗi - cộng và phép nhân. Các yếu tố rủi ro TBD Ví dụ Ví dụ 1 (bổ sung) rezos @ bezel ~ / phòng thí nghiệm / số nguyên $ cat add.c #include






















#include

int main (void)
{
int a; // a = 2147483647; a = INT_MAX; printf ("int a (INT_MAX) =% d (0x% x), int a (INT_MAX) + 1 =% d (0x% x ) n ", a, a, a + 1, a + 1); return 0; } rezos @ bezel ~ / phòng thí nghiệm / số nguyên $ ./add int a (INT_MAX) = 2147483647 (0x7fffffff), int a (INT_MAX) + 1 = -2147483648 (0x80000000) Bằng cách thêm 1 vào ký (+ hoặc -) có thể lớn nhất giá trị số nguyên, chúng tôi ghi đè lên các bit dấu. Trong ngắn hạn, bằng cách thêm hai con số tích cực chúng tôi nhận được một số tiêu cực lớn. Ví dụ 2 (nhân) rezos @ bezel ~ / phòng thí nghiệm / số nguyên $ cat multiplication.c #include


















#include
#include
#include

int main (int argc, char ** argv)
{
int i, j, z = 0x00000001;
char * tab; if (argc <2) _exit (1); i = atoi (argv [1]); if (i> 0) { tab = malloc (i * sizeof (char *)); if (tab == NULL) _exit (2); } for (j = 0; j










tab [j] = z ++; for (j = 0; j

printf ("tab [j] = 0x% x n", tab [j]); return 0; } rezos @ bezel ~ / phòng thí nghiệm / số nguyên $ ./multiplication 1073741824 Segmentation lỗi Các chương trình nên viết một "z" giá trị vào các mảng của con trỏ và sau đó in ra. Với một kích thước mảng lựa chọn đặc biệt (số lượng phần tử của nó) nó có thể sử dụng một lỗi tràn số nguyên tràn mảng "tab". Ví dụ dưới đây giải thích lý do tại sao nó xảy ra. rezos @ bezel ~ / phòng thí nghiệm / số nguyên $ cat multi.c # bao gồm













int main (void)
{
printf ("1073741824 * 4 =% d n", 1073741824 * 4);
return 0;
}
Trong chương trình này chúng ta nhân 1073741824 * 4 vì sizeof (char *) sẽ trả về 4. rezos @ bezel ~ / phòng thí nghiệm / số nguyên $ gcc -o -ggdb multi.c đa multi.c: Trong chức năng 'chính': multi.c: 6: cảnh báo: tràn số nguyên trong biểu hiện Trình biên dịch cảnh báo chúng ta rằng chương trình có chứa một biểu hiện gây ra một số nguyên tràn. Để chắc chắn rằng những gì là kết quả của phép nhân sẽ là: rezos @ bezel ~ / phòng thí nghiệm / số nguyên $ ./multi 1073741824 * 4 = 0 malloc (0) (trong ví dụ chính) sẽ cấp phát bộ nhớ với kích thước 0 một cách chính xác (poprawnie) / thành công (z powodzeniem), và điều đó sẽ cho phép ghi đè lên phân đoạn bộ nhớ trên heap. cấp phát bộ nhớ với một giá trị tiêu cực có thể gây ra phân bổ của phân đoạn bộ nhớ rất nhỏ hoặc rất lớn phụ thuộc vào việc thực hiện * alloc () chức năng. Lỗi tràn bộ nhớ cũng có thể dẫn đến tình trạng báo cáo tình trạng, trong đó có nghĩa vụ phải kiểm tra bộ đệm ranh giới, được bỏ qua. lỗi Integer overflow không luôn luôn là một mối đe dọa mình. Tuy nhiên, họ cung cấp khả năng ghi đè lên hoặc đọc nội dung bộ nhớ ngoài boudries của bộ đệm, ví dụ trong lập chỉ mục đệm.












đang được dịch, vui lòng đợi..
 
Các ngôn ngữ khác
Hỗ trợ công cụ dịch thuật: Albania, Amharic, Anh, Armenia, Azerbaijan, Ba Lan, Ba Tư, Bantu, Basque, Belarus, Bengal, Bosnia, Bulgaria, Bồ Đào Nha, Catalan, Cebuano, Chichewa, Corsi, Creole (Haiti), Croatia, Do Thái, Estonia, Filipino, Frisia, Gael Scotland, Galicia, George, Gujarat, Hausa, Hawaii, Hindi, Hmong, Hungary, Hy Lạp, Hà Lan, Hà Lan (Nam Phi), Hàn, Iceland, Igbo, Ireland, Java, Kannada, Kazakh, Khmer, Kinyarwanda, Klingon, Kurd, Kyrgyz, Latinh, Latvia, Litva, Luxembourg, Lào, Macedonia, Malagasy, Malayalam, Malta, Maori, Marathi, Myanmar, Mã Lai, Mông Cổ, Na Uy, Nepal, Nga, Nhật, Odia (Oriya), Pashto, Pháp, Phát hiện ngôn ngữ, Phần Lan, Punjab, Quốc tế ngữ, Rumani, Samoa, Serbia, Sesotho, Shona, Sindhi, Sinhala, Slovak, Slovenia, Somali, Sunda, Swahili, Séc, Tajik, Tamil, Tatar, Telugu, Thái, Thổ Nhĩ Kỳ, Thụy Điển, Tiếng Indonesia, Tiếng Ý, Trung, Trung (Phồn thể), Turkmen, Tây Ban Nha, Ukraina, Urdu, Uyghur, Uzbek, Việt, Xứ Wales, Yiddish, Yoruba, Zulu, Đan Mạch, Đức, Ả Rập, dịch ngôn ngữ.

Copyright ©2024 I Love Translation. All reserved.

E-mail: