c++ / valgrind on linux

Dev./Sec. Study/C/C++ 2014.02.06 22:11

뭐 큰건 아니고...


ubuntu 10.10 에서 package 설치 한 valgrind 3.6.0 에선 c++로 작성한 바이너리의 메모리 릭 체크를 못하더라


삭제하고 3.9.0 을 소스 컴파일 해서 설치했더니 잘되더라


끝.

'Dev./Sec. Study > C/C++' 카테고리의 다른 글

c++ / valgrind on linux  (0) 2014.02.06
The "goes toward" operator  (0) 2013.03.15
CRC32 implementation from apple open source  (0) 2012.11.30
동생의 스네이크 게임  (0) 2012.11.11
Struct Hack  (0) 2012.08.23
[펌][C++] new는 null을 return하는가?  (0) 2012.03.07

설정

트랙백

댓글

The "goes toward" operator

Dev./Sec. Study/C/C++ 2013.03.15 11:37


The "goes toward" operator

        void doStuff(int count) {
                while(count --> 0) 
                        fleh();
        }




일반적으로 사용하는 것과 다른 점이 공백 위치 뿐인데

엄청난 직관력


일수도 있고 아닐 수도 있고.


출처 : http://www.steike.com/code/useless/evil-c/



'Dev./Sec. Study > C/C++' 카테고리의 다른 글

c++ / valgrind on linux  (0) 2014.02.06
The "goes toward" operator  (0) 2013.03.15
CRC32 implementation from apple open source  (0) 2012.11.30
동생의 스네이크 게임  (0) 2012.11.11
Struct Hack  (0) 2012.08.23
[펌][C++] new는 null을 return하는가?  (0) 2012.03.07

설정

트랙백

댓글

CRC32 implementation from apple open source

Dev./Sec. Study/C/C++ 2012.11.30 17:46

이거줴


http://www.opensource.apple.com/source/xnu/xnu-1456.1.26/bsd/libkern/crc32.c



crc32.c   [plain text]


/*-
 *  COPYRIGHT (C) 1986 Gary S. Brown.  You may use this program, or
 *  code or tables extracted from it, as desired without restriction.
 *
 *  First, the polynomial itself and its table of feedback terms.  The
 *  polynomial is
 *  X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0
 *
 *  Note that we take it "backwards" and put the highest-order term in
 *  the lowest-order bit.  The X^32 term is "implied"; the LSB is the
 *  X^31 term, etc.  The X^0 term (usually shown as "+1") results in
 *  the MSB being 1
 *
 *  Note that the usual hardware shift register implementation, which
 *  is what we're using (we're merely optimizing it by doing eight-bit
 *  chunks at a time) shifts bits into the lowest-order term.  In our
 *  implementation, that means shifting towards the right.  Why do we
 *  do it this way?  Because the calculated CRC must be transmitted in
 *  order from highest-order term to lowest-order term.  UARTs transmit
 *  characters in order from LSB to MSB.  By storing the CRC this way
 *  we hand it to the UART in the order low-byte to high-byte; the UART
 *  sends each low-bit to hight-bit; and the result is transmission bit
 *  by bit from highest- to lowest-order term without requiring any bit
 *  shuffling on our part.  Reception works similarly
 *
 *  The feedback terms table consists of 256, 32-bit entries.  Notes
 *
 *      The table can be generated at runtime if desired; code to do so
 *      is shown later.  It might not be obvious, but the feedback
 *      terms simply represent the results of eight shift/xor opera
 *      tions for all combinations of data and CRC register values
 *
 *      The values must be right-shifted by eight bits by the "updcrc
 *      logic; the shift must be unsigned (bring in zeroes).  On some
 *      hardware you could probably optimize the shift in assembler by
 *      using byte-swap instructions
 *      polynomial $edb88320
 *
 *
 * CRC32 code derived from work by Gary S. Brown.
 */

#include <sys/param.h>
#include <sys/systm.h>

static uint32_t crc32_tab[] = {
	0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
	0xe963a535, 0x9e6495a3,	0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
	0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
	0xf3b97148, 0x84be41de,	0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
	0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,	0x14015c4f, 0x63066cd9,
	0xfa0f3d63, 0x8d080df5,	0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
	0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,	0x35b5a8fa, 0x42b2986c,
	0xdbbbc9d6, 0xacbcf940,	0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
	0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
	0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
	0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,	0x76dc4190, 0x01db7106,
	0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
	0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
	0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
	0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
	0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
	0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
	0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
	0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
	0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
	0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
	0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
	0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
	0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
	0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
	0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
	0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
	0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
	0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
	0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
	0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
	0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
	0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
	0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
	0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
	0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
	0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
	0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
	0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
	0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
	0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
	0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
	0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
};

uint32_t
crc32(uint32_t crc, const void *buf, size_t size)
{
	const uint8_t *p;

	p = buf;
	crc = crc ^ ~0U;

	while (size--)
		crc = crc32_tab[(crc ^ *p++) & 0xFF] ^ (crc >> 8);

	return crc ^ ~0U;
}


'Dev./Sec. Study > C/C++' 카테고리의 다른 글

c++ / valgrind on linux  (0) 2014.02.06
The "goes toward" operator  (0) 2013.03.15
CRC32 implementation from apple open source  (0) 2012.11.30
동생의 스네이크 게임  (0) 2012.11.11
Struct Hack  (0) 2012.08.23
[펌][C++] new는 null을 return하는가?  (0) 2012.03.07
C, CRC32

설정

트랙백

댓글

동생의 스네이크 게임

Dev./Sec. Study/C/C++ 2012.11.11 22:29


엥시가 2012학년도 1학년 1학기 C 언어 과제로 만든 스네이크.



허물 벋기 알고리즘 ㄷㄷ해



Snake.h


Snake.c


'Dev./Sec. Study > C/C++' 카테고리의 다른 글

The "goes toward" operator  (0) 2013.03.15
CRC32 implementation from apple open source  (0) 2012.11.30
동생의 스네이크 게임  (0) 2012.11.11
Struct Hack  (0) 2012.08.23
[펌][C++] new는 null을 return하는가?  (0) 2012.03.07
terms for programming  (0) 2011.12.22

설정

트랙백

댓글

Struct Hack

Dev./Sec. Study/C/C++ 2012.08.23 09:15

출처 : http://www.geeksforgeeks.org/archives/22677




요는, length가 0인 array가 포함된 구조체의 메모리 사이즈를 크게 잡으면


멤버인 length 0짜리 array를 동적할당 하듯이 쓸 수 있다는 말인 듯.



구조체를 sizeof (struct __) 만큼이 아니라, 그 이상으로 원하는 만큼 더 잡아서


멤버 array 를 쓰겠다는건데..


array length 0 은 궁금했지만 해보진 않았는데, 이런 효과가 -ㅅ-;;



단순히 동적할당 할 뿐이지만, 잘 쓰면 괜찮은 방법일 듯.


C99 에 명시된 방법이라곤 하는데, 특정 플랫폼의 gcc가 아닌 컴파일러에서도 동작하느냐가 궁금하군요.



코드에 오류라던가 조금 보이는거 같지만, 알아서 걸러봐야겠네요.


Struct Hack

August 14, 2012

What will be the size of following structure?


struct employee

{

    int     emp_id;

    int     name_len;

    char    name[0];

};

4 + 4 + 0 = 8 bytes.


And what about size of “name[0]“. In gcc, when we create an array of zero length, it is considered as array of incomplete type that’s why gcc reports its size as “0″ bytes. This technique is known as “Stuct Hack”. When we create array of zero length inside structure, it must be (and only) last member of structure. Shortly we will see how to use it.

“Struct Hack” technique is used to create variable length member in a structure. In the above structure, string length of “name” is not fixed, so we can use “name” as variable length array.


Let us see below memory allocation.


struct employee *e = malloc(sizeof(*e) + sizeof(char) * 128); 

is equivalent to


struct employee

{

    int     emp_id;

    int     name_len;

    char    name[128]; /* character array of size 128 */

};

And below memory allocation


struct employee *e = malloc(sizeof(*e) + sizeof(char) * 1024); 

is equivalent to


struct employee

{

    int     emp_id;

    int     name_len;

    char    name[1024]; /* character array of size 1024 */

};

Note: since name is character array, in malloc instead of “sizeof(char) * 128″, we can use “128″ directly. sizeof is used to avoid confusion.


Now we can use “name” same as pointer. e.g.


e->emp_id = 100;

e->name_len = strlen("Geeks For Geeks");

strncpy(e->name, "Geeks For Geeks", e->name_len);


When we allocate memory as given above, compiler will allocate memory to store “emp_id” and “name_len” plus contiguous memory to store “name”. When we use this technique, gcc guaranties that, “name” will get contiguous memory.

Obviously there are other ways to solve problem, one is we can use character pointer. But there is no guarantee that character pointer will get contiguous memory, and we can take advantage of this contiguous memory. For example, by using this technique, we can allocate and deallocate memory by using single malloc and free call (because memory is contagious). Other advantage of this is, suppose if we want to write data, we can write whole data by using single “write()” call. e.g.


write(fd, e, sizeof(*e) + name_len); /* write emp_id + name_len + name */ 


If we use character pointer, then we need 2 write calls to write data. e.g.


write(fd, e, sizeof(*e)); /* write emp_id + name_len */

write(fd, e->name, e->name_len); /* write name */


Note: In C99, there is feature called “flexible array members”, which works same as “Struct Hack”


This article is compiled by Narendra Kangralkar. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above


설정

트랙백

댓글

[펌][C++] new는 null을 return하는가?

Dev./Sec. Study/C/C++ 2012.03.07 14:56

malloc() 은 실패 할 경우 NULL을 return한다.

에전에 new가 이상한 주소를 return해서 뭔가 한참 찾다가 결국 malloc() 으로 바꿨는데

이건가.. 싶다

이 분 블로그 예전에 한번 들었었는데, 다시 와보니 좋은 글이 많다 :)

원문



출처 :  http://bunhere.tistory.com/326


'Dev./Sec. Study > C/C++' 카테고리의 다른 글

동생의 스네이크 게임  (0) 2012.11.11
Struct Hack  (0) 2012.08.23
[펌][C++] new는 null을 return하는가?  (0) 2012.03.07
terms for programming  (0) 2011.12.22
C 함수의 호출 원리를 이용한 sprintf() 의 약식 구현  (0) 2009.01.05
'작은아이'의 printf  (4) 2008.12.02

설정

트랙백

댓글

terms for programming

Dev./Sec. Study/C/C++ 2011.12.22 11:26
생소한 용어가 이리도 많다 ..ㅋ

다적어 놓겠다.

더보기


'Dev./Sec. Study > C/C++' 카테고리의 다른 글

Struct Hack  (0) 2012.08.23
[펌][C++] new는 null을 return하는가?  (0) 2012.03.07
terms for programming  (0) 2011.12.22
C 함수의 호출 원리를 이용한 sprintf() 의 약식 구현  (0) 2009.01.05
'작은아이'의 printf  (4) 2008.12.02
itoa() 구현  (2) 2008.12.01

설정

트랙백

댓글

C 함수의 호출 원리를 이용한 sprintf() 의 약식 구현

Dev./Sec. Study/C/C++ 2009.01.05 18:29

더보기


출처 : http://kldp.org/node/23207

'Dev./Sec. Study > C/C++' 카테고리의 다른 글

[펌][C++] new는 null을 return하는가?  (0) 2012.03.07
terms for programming  (0) 2011.12.22
C 함수의 호출 원리를 이용한 sprintf() 의 약식 구현  (0) 2009.01.05
'작은아이'의 printf  (4) 2008.12.02
itoa() 구현  (2) 2008.12.01
DES  (2) 2008.10.17

설정

트랙백

댓글

'작은아이'의 printf

Dev./Sec. Study/C/C++ 2008.12.02 19:19
똑똑한 우리 쪼매난거☆

printf.c

'Dev./Sec. Study > C/C++' 카테고리의 다른 글

terms for programming  (0) 2011.12.22
C 함수의 호출 원리를 이용한 sprintf() 의 약식 구현  (0) 2009.01.05
'작은아이'의 printf  (4) 2008.12.02
itoa() 구현  (2) 2008.12.01
DES  (2) 2008.10.17
안습의 교재용 삭제 ㄱ-  (0) 2006.12.04

설정

트랙백

댓글

itoa() 구현

Dev./Sec. Study/C/C++ 2008.12.01 03:01
'작은 아이'의 '시스템 프로그래밍' 과제 도와주다가
리눅스에는 없어서 직접 구현해야하기 때문에 찾게된 itoa() 함수.

굳인거 같아요.

itoa.c


보통은 이정돈 금방 생각해서 만들텐데..
요즘은 머리가 굳어서..

슬프네요 ㅠ
출처 : http://cpueblo.com/programming/cpp/contents/99.html

'Dev./Sec. Study > C/C++' 카테고리의 다른 글

C 함수의 호출 원리를 이용한 sprintf() 의 약식 구현  (0) 2009.01.05
'작은아이'의 printf  (4) 2008.12.02
itoa() 구현  (2) 2008.12.01
DES  (2) 2008.10.17
안습의 교재용 삭제 ㄱ-  (0) 2006.12.04
binary_tree  (0) 2006.11.13

설정

트랙백

댓글