Ethical Hacking

Learn to find vulnerabilities before the bad guys do! Gain real world hands on hacking experience in our state of the art hacking lab. Course designed and taught by expert instructors with years of penetration testing experience. 12 student maximum in every class. Certification attempt included in every package.
Computer Forensics Training at InfoSec Institute

Gain the in-demand skills of a certified computer examiner, learn to recover trace data left behind by fraud, theft, and cybercrime perpetrators. Discover the source of computer crime and abuse at your organization so that it never happens again. All of our class sizes are guaranteed to be 12 students or less to facilitate one-on-one interaction with one of our expert instructors.




Network Security Focus-Sun
[Top] [All Lists]

Re: Sun Studio 11: C++ 5.8 Compiler

Subject: Re: Sun Studio 11: C++ 5.8 Compiler
Date: Mon, 16 Apr 2007 12:05:47 -0600
On Mon, Apr 16, 2007 at 01:22:07AM -0000, neelabhsharma1@gmail.com wrote:
As per the specifications the compiler should be based on C99. But i think it 
still does not handle the function call strtoll(). This issue did not arise 
with RHL 9.0

If it did the handling properly then the result of the program should not be 
0.


/*Snippet of the Code */
#include<stdio.h>
#include<stdlib.h>

int main()
{
char *a = "89abcdef";
long long int c;
a[8] = '\0';
c = strtoll(a, NULL, 16); 
printf("the num is %8x", c); 
return 0;
}


My understanding of the OS, Platform (SPARC), ofcourse C is just of a 
beginner and am eager to learn, please provide supporting comments..


This is consistent with Sun WorkShop 6 and gcc 3.4.2 (Both on Solaris/Sparc).
Gcc 3.4.5 on Linux (Intel) appears to do what you were expecting, but actually
does not. If you change the "char a..." definition to a hex value longer than
8 characters you will not see the last 8 characters on Sparc. On Intel you will
only see the last 8 characters. This is due to differences in byte ordering on
these processors.

The problem is in your printf format. %8x expects to print something of type
"int". Most current compilers specify type "int" to be the same as "long int"
which is 32 bits. "long long int" is 64 bits. What is happening here is you
are printing the first 32 bits of the argument. If you use the correctly
typed format string "%8llx", you should see the correct value printed in all
cases.

I hope this helps your understanding of what has happened here.


Steven Leikeim

-- 

Steven Leikeim, GSEC-Gold                 | We, the willing
Department of Electrical and Computer     | led by the unknowing
     Engineering                          | are doing the impossible
Schulich School of Engineering            | for the ungrateful.
University of Calgary                     | We have done so much
Calgary, Alberta                          | for so long with so little
                                          | we are now qualified
Phone: (403) 220-5373 Fax: (403) 282-6855 | to do anything with nothing.

<Prev in Thread] Current Thread [Next in Thread>