C++ code
#include "stdio.h"
#include "string.h"
int FuncChar( char c )
{
return c == 'a';
}
void FuncName( char *pName )
{
printf( "%s", pName );
}
int Func3( long int hiSel, int iVal, char * pName )
{
if ( hiSel <= 4 )
return 1;
printf( "Name is %s val: %d", pName, iVal);
return 0;
}
int FuncMM( char c, int iVal, char * pName, int * pData, int iWid, int iHet, int iDeep, long lTempral )
{
if ( c == 'a')d
return 1;
else if ( c == 'c' )
{
printf( "Name is %s val: %d", pName, iVal);
}
return 0;
}
char *strName = "Test ASM Function Stack value!\n";
int main ()
{
int iWid = 1;
int iHet = 2;
int iDeep = sizeof(int);
long lTempral = sizeof(long);
int arData[2];
long int hiVal = sizeof(long int );
char c = 'c';
FuncChar( c );
FuncName( strName );
Func3( c, hiVal, strName);
FuncMM(c, iWid, strName, &arData[0], iWid, iHet, iDeep, lTempral );
return 0;
}
ASM code following:
FuncChar:
push %rbp
mov %rsp,%rbp
mov %edi,%eax
mov %al,-0x4(%rbp)
cmpb $0x61,-0x4(%rbp)
sete %al
movzbl %al,%eax
pop %rbp
retq
FuncName:
push %rbp
mov %rsp,%rbp
sub $0x10,%rsp
mov %rdi,-0x8(%rbp)
mov -0x8(%rbp),%rax
mov %rax,%rsi
mov $0x4007b8,%edi
mov $0x0,%eax
callq 0x400470 <printf@plt>
nop
leaveq
retq
Func3:
push %rbp
mov %rsp,%rbp
sub $0x20,%rsp
mov %rdi,-0x8(%rbp)
mov %esi,-0xc(%rbp)
mov %rdx,-0x18(%rbp)
if ( hiSel <= 4 )
cmpq $0x4,-0x8(%rbp)
jg 0x4005f1 <Func3+33>
return 1;
mov $0x1,%eax
jmp 0x40060f <Func3+63>
printf( "Name is %s val: %d", pName, iVal);
mov -0xc(%rbp),%edx
mov -0x18(%rbp),%rax
mov %rax,%rsi
mov $0x4007bb,%edi
mov $0x0,%eax
callq 0x400470 <printf@plt>
return 0;
mov $0x0,%eax
}
leaveq
retq
{
FuncMM:
push %rbp
mov %rsp,%rbp
sub $0x20,%rsp
mov %edi,%eax
mov %esi,-0x8(%rbp)
mov %rdx,-0x10(%rbp)
mov %rcx,-0x18(%rbp)
mov %r8d,-0x1c(%rbp)
mov %r9d,-0x20(%rbp)
mov %al,-0x4(%rbp)
if ( c == 'a')
cmpb $0x61,-0x4(%rbp)
jne 0x40063e <FuncMM+45>
return 1;
mov $0x1,%eax
jmp 0x400662 <FuncMM+81>
else if ( c == 'c' )
cmpb $0x63,-0x4(%rbp)
jne 0x40065d <FuncMM+76>
printf( "Name is %s val: %d", pName, iVal);
mov -0x8(%rbp),%edx
mov -0x10(%rbp),%rax
mov %rax,%rsi
mov $0x4007bb,%edi
mov $0x0,%eax
callq 0x400470 <printf@plt>
return 0;
mov $0x0,%eax
}
leaveq
retq
{
main:
push %rbp
mov %rsp,%rbp
sub $0x30,%rsp
mov %fs:0x28,%rax
mov %rax,-0x8(%rbp)
xor %eax,%eax
int iWid = 1;
movl $0x1,-0x2c(%rbp)
int iHet = 2;
movl $0x2,-0x28(%rbp)
int iDeep = sizeof(int);
movl $0x4,-0x24(%rbp)
long lTempral = sizeof(long);
movq $0x8,-0x20(%rbp)
long int hiVal = sizeof(long int );
movq $0x8,-0x18(%rbp)
char c = 'c';
movb $0x63,-0x2d(%rbp)
FuncChar( c );
movsbl -0x2d(%rbp),%eax
mov %eax,%edi
callq 0x400596 <FuncChar>
FuncName( strName );
mov 0x20098a(%rip),%rax # 0x601040 <strName>
mov %rax,%rdi
callq 0x4005ab <FuncName>
Func3( c, hiVal, strName);
mov 0x20097b(%rip),%rdx # 0x601040 <strName>
mov -0x18(%rbp),%rax
mov %eax,%ecx
movsbq -0x2d(%rbp),%rax
mov %ecx,%esi
mov %rax,%rdi
callq 0x4005d0 <Func3>
FuncMM(c, iWid, strName, &arData[0], iWid, iHet, iDeep, lTempral );
mov 0x20095f(%rip),%rdx # 0x601040 <strName>
movsbl -0x2d(%rbp),%eax
mov -0x28(%rbp),%r9d
mov -0x2c(%rbp),%r8d
lea -0x10(%rbp),%rcx
mov -0x2c(%rbp),%esi
pushq -0x20(%rbp)
mov -0x24(%rbp),%edi
push %rdi
mov %eax,%edi
callq 0x400611 <FuncMM>
add $0x10,%rsp
return 0;
mov $0x0,%eax
}