Skip to contentSkip to conversation

Declare strings on stack, gas

DISCUSSION Daniel Hilst 3 participants 4 messages Apr 18, 2012 – Apr 19, 2012

lore
Share & tools
lore
#0 lore raw

Is possible to declare strings on stack? I'm using mov + ebp offsets to do something like that.. Is there an easier way to do it?

Here is an sample off how I'm doing it: http://sprunge.us/UUZI

The hex numbers are a "Hello World" string..
I have tried .assci without success :(

Thanks in advance!

Signature · 1 line
Follow the white rabbit!
#1 lore raw

Since the stack could be any arbitrary place in memory, I'm afraid you don't got too many choice but set-up the content by yourself.

When a local array of char is declared in C, i.e. something like:
void foo()
{
char s[] = "hello world";
}
The compiler does just the same thing as you by MOVL, and when the string is rather long, the compiler would place the string in .data and call memcpy() to copy it to stack.

Quoted 11 lines · Daniel Hilst

Is possible to declare strings on stack? I'm using mov + ebp offsets to do something like that.. Is there an easier way to do it?

Here is an sample off how I'm doing it: http://sprunge.us/UUZI

The hex numbers are a "Hello World" string..
I have tried .assci without success :(

Thanks in advance!

Signature · 2 lines
Regards,
Zhongye
#2 lore raw
In reply to Daniel Hilst
Quoted 10 lines · Daniel Hilst

Is possible to declare strings on stack? I'm using mov + ebp offsets to do something like that.. Is there an easier way to do it?

Here is an sample off how I'm doing it: http://sprunge.us/UUZI

The hex numbers are a "Hello World" string..
I have tried .assci without success :(

Thanks in advance!

Basically, you're asking if the compiler/assembler can initialize the stack to some known value. Since memory on the stack is dynamically allocated by the instructions:

doit:
push %ebp ; Save caller's base pointer
mov %esp, %ebp ; Establish our base pointer

sub $12, %esp ; Allocate memory on the stack

the answer is 'no.' After you allocate stack memory (which now has garbage values), you need to copy known values there. Write your code in C and use the '-S' gcc option to see how the compiler does this. The '-S' option will generate the assembly language file foo.s from the C source file foo.c.

--Bob

#3 lore raw
Quoted 24 lines · Robert Plantz
Quoted 11 lines · Daniel Hilst

Is possible to declare strings on stack? I'm using mov + ebp offsets to do something like that.. Is there an easier way to do it?

Here is an sample off how I'm doing it: http://sprunge.us/UUZI

The hex numbers are a "Hello World" string..
I have tried .assci without success :(

Thanks in advance!

Basically, you're asking if the compiler/assembler can initialize the stack to some known value. Since memory on the stack is dynamically allocated by the instructions:

doit:
push %ebp ; Save caller's base pointer
mov %esp, %ebp ; Establish our base pointer

sub $12, %esp ; Allocate memory on the stack

Quoted 10 lines

the answer is 'no.' After you allocate stack memory (which now has garbage values), you need to copy known values there. Write your code in C and use the '-S' gcc option to see how the compiler does this. The '-S' option will generate the assembly language file foo.s from the C source file foo.c.

--Bob

Thanks guys, the closest I got was use .text section and the %esi trick. Now I know about stack dynamics.

Cheers!

Signature · 1 line
Follow the white rabbit!