Sponsored Content
Top Forums Programming Parameters placement on stack in C Post 303035998 by migurus on Wednesday 12th of June 2019 02:21:00 AM
Old 06-12-2019
Parameters placement on stack in C

I am trying to illustrate the reverse order of parameters on the stack when passed to a function in C:


Code:
#include <stdio.h>

void  p(int p1, int p2, double p3)
{
        printf("params:\n"
                        "1) %p offset = %li\n"
                        "2) %p offset = %li\n"
                        "3) %p\n",
                        (void *)&p1,    (void *)&p1 - (void *)&p2,
                        (void *)&p2,    (void *)&p2 - (void *)&p3,
                        (void *)&p3);
}

int main(int argc, char *argv[])
{
  struct A a = {10,11,12, {1,2,3}};

        p(-1, 0, +1);
        return(0);
}

Result is:
Code:
params:
1) 0x7ffe2f20afac offset = 4
2) 0x7ffe2f20afa8 offset = 8
3) 0x7ffe2f20afa0

This is as expected on the 64 bit system (Ubuntu 19.04)


When I pass a structure as a parameter the stack looks puzzling to me:
Code:
#include <stdio.h>
struct A {
        int     n1;
        int     n2;
        int     n3;
        int     arr[3];
};

void    p(int p1, struct A p2, double p3)
{
        printf("params:\n"
                        "1) %p offset = %li\n"
                        "2) %p offset = %li\n"
                        "3) %p\n",
                        (void *)&p1,    (void *)&p1 - (void *)&p2,
                        (void *)&p2,    (void *)&p2 - (void *)&p3,
                        (void *)&p3);
}

int main(int argc, char *argv[])
{
  struct A a = {10,11,12, {1,2,3}};
        p(-1, a, +1);
        return(0);
}

Now result is:
Code:
params:
1) 0x7ffee5f7ddbc offset = -20
2) 0x7ffee5f7ddd0 offset = 32
3) 0x7ffee5f7ddb0

Parameter 3 is close to 1 and parameter 2 is not between 1 and 3? offsets look wrong to me.Please shed some light here, thanks in advance.
The compiler is gcc 7.4.0
 

8 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

code placement

I'm sorry if something like this has already been posted, but I didn't find anything like it. I'm using ksh The code that I've come up with will initially print what I want, but will then keep repeating the second number. I'm just trying to teach myself and can't seem to find the code to work.... (16 Replies)
Discussion started by: scott78
16 Replies

2. AIX

Aixterm icon placement?

Hi, I'm using xterm and aixterm with Mwm on AIX, and having trouble controlling icon placement when minimising windows. Basically when I run an xterm or aixterm I want to be able to specify where the icon will be if minimised. The man page mentions the "#geometry Geometry" option to aixterm,... (1 Reply)
Discussion started by: cunningdavid
1 Replies

3. UNIX Desktop Questions & Answers

Controlling icon placement?

Hi, I'm using xterm and aixterm with Mwm on AIX, and having trouble controlling icon placement when minimising windows. Basically when I run an xterm or aixterm I want to be able to specify where the icon will be if minimised. The man page mentions the "#geometry Geometry" option to aixterm,... (1 Reply)
Discussion started by: cunningdavid
1 Replies

4. Programming

what is stack winding and stack unwinding

helo can u tell me what do you mean by stack winding and stack unwinding Regards, Amit (2 Replies)
Discussion started by: amitpansuria
2 Replies

5. Solaris

Data placement in SVM

Is it possible to place the data in inner or outer edge with SVM ( solaris volume manager ) or VxVM like we can do in AIX LVM ? (1 Reply)
Discussion started by: fugitive
1 Replies

6. UNIX for Dummies Questions & Answers

Kernel Stack vs User Mode Stack

Hi, I am new to the linux kernel development area. I want to know what is the difference between kernel mode stack and user mode stack? Does each process has a user mode stack and a kernel mode stack?? Or Each process has a user mode stack and there is only one kernel mode stack that is shared by... (4 Replies)
Discussion started by: saurabhkoar
4 Replies

7. Cybersecurity

Snort/NTOP Placement

I have been asked to place 2 (1 NTOP & 1 SNORT) boxes within our network as part of our tool kit for network monitoring and Intrusion detection. Out network is very simplistic and it layed out like this: internet | | Cisco 1811 Router (8x Layer 2 switch ports) ... (0 Replies)
Discussion started by: metallica1973
0 Replies

8. UNIX for Advanced & Expert Users

Unix linked-list placement

Hi, I am programming in kernel, and I want to use a double linked list that holds infos that every process could access and modify THIS list. So, I suppose it is a 'global' variable since every process(thread) can reach it, I am wondering where to put it? by changing some of the kernel files? (1 Reply)
Discussion started by: louisTan
1 Replies
SIGSTACK(2)							System Calls Manual						       SIGSTACK(2)

NAME
sigstack - set and/or get signal stack context SYNOPSIS
#include <signal.h> struct sigstack { caddr_t ss_sp; int ss_onstack; }; sigstack(ss, oss); struct sigstack *ss, *oss; DESCRIPTION
Sigstack allows users to define an alternate stack on which signals are to be processed. If ss is non-zero, it specifies a signal stack on which to deliver signals and tells the system if the process is currently executing on that stack. When a signal's action indicates its handler should execute on the signal stack (specified with a sigvec(2) call), the system checks to see if the process is currently execut- ing on that stack. If the process is not currently executing on the signal stack, the system arranges a switch to the signal stack for the duration of the signal handler's execution. If oss is non-zero, the current signal stack state is returned. NOTES
Signal stacks are not ``grown'' automatically, as is done for the normal stack. If the stack overflows unpredictable results may occur. RETURN VALUE
Upon successful completion, a value of 0 is returned. Otherwise, a value of -1 is returned and errno is set to indicate the error. ERRORS
Sigstack will fail and the signal stack context will remain unchanged if one of the following occurs. [EFAULT] Either ss or oss points to memory that is not a valid part of the process address space. SEE ALSO
sigvec(2), setjmp(3) 4.2 Berkeley Distribution June 30, 1985 SIGSTACK(2)
All times are GMT -4. The time now is 11:35 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy