SUN gcc 관련 문의

gentleyi의 이미지

solaris 8에서 gcc를 이용하여 컴파일하여 처리하는데요..

dns 관련 메시지를 만들려고 하다가 segment error가 나는데요..

소스는

int dns_update(char* zone, unsigned int addr, int expire, char* server)
{
HEADER *hp;
char *p,*cp;
char name[BUFSIZ],realm[BUFSIZ],hostname[BUFSIZ];
char buf[1024];

hp = (HEADER *)buf;

bzero(hp,sizeof(*hp));
hp->id = htons(rand()%0xFFFF);
hp->qr = 0;
hp->opcode = NS_UPDATE_OP;
hp->qdcount = htons(1);
hp->ancount = htons(0);
hp->nscount = htons(1);
hp->arcount = htons(0);

strcpy(hostname, zone);
if(cp=strchr(hostname, '@')) {
*cp = ' ';
sscanf(hostname,"%s%s",name,realm);
}

p = (char*)(hp+1);
cp = (char*)strtok(realm, ".");
if (cp) {
*p++ = strlen(cp);
memcpy(p, cp, strlen(cp));
p += strlen(cp);
while(cp = (char*)strtok(NULL, ".")) {
*p++ = strlen(cp);
memcpy(p, cp, strlen(cp));
p+=strlen(cp);
}
}

*p++ = 0x00;
*((unsigned short*)p)++ = htons(T_SOA);
*((unsigned short*)p)++ = htons(C_IN);

name[0]=realm[0]=0;
strcpy(hostname,zone);
if(cp=strchr(hostname,'@')) {
*cp = ' ';
sscanf(hostname,"%s%s",name,realm);
}

if (name) {
*p++ = strlen(name);
memcpy(p, name, strlen(name));
p+=strlen(name);
}

*p++ = 0xC0;
*p++ = 0x0C;

*((unsigned short*)p)++ = htons(T_A);
*((unsigned short*)p)++ = htons(C_IN);
*((unsigned int*)p)++ = htonl(expire);
*((unsigned short*)p)++ = htons(4);
*((unsigned int*)p)++ = addr;
len = p - buf;
}

여기에서 gdb를 이용해 보면
Program received signal SIGSEGV, Segmentation fault.
*((unsigned int*)p)++ = addr;
에서 멈추네요..

alignment error 같이 보이는데.. 맞는지요?
*((unsigned short*)p)++ = htons(T_A);
*((unsigned short*)p)++ = htons(C_IN);
*((unsigned int*)p)++ = htonl(expire);
*((unsigned short*)p)++ = htons(4);
*((unsigned int*)p)++ = addr;
len = p - buf;

*((unsigned short*)p)++ = htons(T_A);
*((unsigned short*)p)++ = htons(C_IN);
*((unsigned int*)p)++ = htonl(expire);
*((unsigned short*)p)++ = htons(4);
*((unsigned short*)p)++ = htons(4);
----------------------------------------------
*((unsigned int*)p)++ = addr;
len = p - buf;
처럼 밑줄친부분 처럼 하면 넘어가거든요..

혹시 리눅스에서는 문제가 없었는디.. 선에서 해보니까..
위와 같이 발생하는데 alignment 문제인지요/
그렇다면 gcc에 어떻게 옵션을 주어야 할지요..
스트럭쳐가 아니라서 pack을 처리 안할것 같은데요..
알려 주시면 감사하겠습니다..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.