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!
Số nguyên tràn/UnderflowsTrang này được đánh dấu để được xem xét để xóa bỏ.#REDIRECT Integer_overflowCuối cùng phiên bản: 30/3/2009Mô tảSố nguyên tràn 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) kiểu số tràn do hoạt động số học. Nói chung, có là hoạt động chỉ có hai mà gây ra các loại lỗi - bổ sung và phép nhân.Yếu tố nguy cơTBDVí dụVí dụ 1 (bổ sung)Rezos@bezel ~/labs/integer $ cát add.c#include #include int main(void){ int a;một = 2147483647; một = INT_MAX; printf ("int (INT_MAX) = %d (0 x %x), int (INT_MAX) + 1 = %d (0x%x)
", một, một, một + 1, một + 1); trở về 0;}Rezos@bezel ~/labs/integer $. / ThêmINT (INT_MAX) = 2147483647 (0x7fffffff), int (INT_MAX) + 1 =-2147483648 (0x80000000)Bằng cách thêm 1 là lớn nhất có thể ký (+ hoặc -) giá trị số nguyên chúng tôi ghi đè lên chút dấu hiệu. Trong ngắn hạn, bằng cách thêm hai số dương chúng tôi nhận được một số lượng lớn tiêu cực.Ví dụ 2 (nhân)Rezos@bezel ~/labs/integer $ cát multiplication.c#include #include #include #include int chính (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 (tôi * sizeof(char *)); if(tab == null) _exit(2); } cho (j = 0; j tab [j] = z ++; cho (j = 0; j printf ("tab [j] =0x%x
", tab[j]); trở về 0;}Rezos@bezel ~/labs/integer $. / nhân 1073741824Phân khúc lỗiChương trình nên viết một giá trị "z" vào các mảng của các con trỏ và sau đó in ra. Với một kích thước mảng được lựa chọn đặc biệt (số thành phần của nó) có thể sử dụng một số nguyên tràn lỗi để tràn các mảng "tab".Ví dụ dưới đây giải thích tại sao nó xảy ra.Rezos@bezel ~/labs/integer $ cát multi.c#include int main(void){ printf ("1073741824 * 4 = %d
", 1073741824 * 4); trở về 0;}Trong chương trình này chúng tôi nhân 1073741824 * 4 bởi vì sizeof(char *) sẽ trở lại 4.Rezos@bezel ~/labs/integer $ gcc - ggdb multi.c -o đaMulti.c: chức năng 'chính':Multi.c:6: cảnh báo: số nguyên tràn trong biểu hiệnTrình biên dịch cảnh báo chúng tôi rằng chương trình có chứa một biểu hiện mà gây ra một số nguyên tràn. Để đảm bảo rằng những gì là kết quả của phép nhân sẽ:Rezos@bezel ~/labs/integer $. / multi1073741824 * 4 = 0malloc(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) / successfully(z powodzeniem), và đó sẽ cho phép để ghi đè lên bộ nhớ phân đoạn 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ổ rất nhỏ hoặc phân đoạn nào rất lớn bộ nhớ tùy thuộc vào việc thực hiện các chức năng *alloc(). Số nguyên tràn lỗi cũng có thể dẫn đến tình hình nơi báo cáo tình trạng có nghĩa vụ để kiểm tra bộ đệm ranh giới, được bỏ qua.Số nguyên tràn lỗi không phải là luôn luôn một mối đe dọa chính 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 bộ đệm đánh chỉ mục.Mối đe dọa liên quan đến đại lýphát triển phần mềm nội bộnhà thầuCuộc tấn công có liên quanLỗi tràn bộ đệmLỗ hổng liên quanSố nguyên trànNgăn xếp trànĐống trànLiên quan điều khiểnSử dụng lập trình ngôn ngữ và/hoặc trình biên dịch, mà sẽ kiểm tra bộ đệm boundries và lập chỉ mục của họ.Sử dụng thư viện, mà cung cấp API cho phép tính số học hoạt động (ví dụ: safe_iop [1], IntegerLib[2])Kiểm tra kết quả hoạt động số học, sử dụng số điện thoại số nguyên và so sánh chúng với giá trị kỳ vọng.
đ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. Đại lý mối đe dọa liên quan phát triển phần mềm nội bộ nhà thầu liên quan tấn công tràn bộ đệm liên quan lỗ hổng Integer tràn stack tràn Heap tràn liên quan Controls Sử dụng ngôn ngữ lập trình và / hoặc trình biên dịch, trong đó sẽ kiểm tra các bộ đệm boundries và lập chỉ mục của họ. Sử dụng thư viện, cung cấp API cho phép tính số học (ví dụ như safe_iop [1], IntegerLib [2]) Kiểm tra kết quả của các phép tính số học, trong đó sử dụng số nguyên và so sánh chúng với giá trị dự kiến.


























đ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: