General Category > Sol_Asm
writing to data or bss section variables
mineiro:
Hello sir Bogdan, I hope you're fine.
I'm being able to write on variables into data or bss section by using registers but not using direct value.
--- Code: ---.use64
section "text" class_code alias ".text"
section "data" class_data alias ".data"
section "bss" class_bss alias ".bss"
.entry _start
.bss
test dq ?
.data
tst dq 0
.text
_start:
mov [test], 0 ;<---
mov [tst], 0 :<---
mov rdi,0
mov rax, 60
syscall
/*
sol_asm2 mov0.solasm mov0.o -elf64
ld -m elf_x86_64 -o mov0 mov0.o
rm list.o
*/
--- End code ---
I'm able to 'xor eax,eax' or 'xor rax,rax' and after mov zeroed register to tst or test variable. But if I try direct number on that variables, on bss section solasm give me some errors while assembling and on data section assemble fine but when I execute program I'm receiving segmentation fault.
thanks.
bogdanontanu:
Hi mineiro,
Thanks for testing this.
I will check it out and fix it ;)
mineiro:
Can you check this too, not sure if this is my fault but I'm being unable to write a literal string inside some structure.
I perceived that when using duplicated names some mistakes happen. Like same name on variable and after defined as a literal string.
--- Code: ---.use64
section "text" class_code alias ".text"
section "data" class_data alias ".data"
section "bss" class_bss alias ".bss"
struct person
name rq 1
age rq 1
ends
struc literal
header rb 1 ;dq ?
ends
.entry _start
.data
align 16
tst db "test",0
test db "tst",0 ;<--If I change test to tt works fine
align 16
_name0 person {
name = tst
age = 10
}
align 16
_name1 person {
name = test
age = 20
}
myheader literal {
header = "E" ;<--**Can not take string here: "E", but hexadecimal values are OK
}
.text
_start:
mov rax,_name0
mov rax,_name1
mov rdi,0
mov rax, 60
syscall
/*
sol_asm2 struc0.solasm struc0.o -elf64
ld -m elf_x86_64 -o struc0 struc0.o
rm struc0.o
*/
--- End code ---
Again, thanks Sir.
----edited---
On code below appears that it's happening an avalanche on structure. Code below needs glib and libc libraries, but if you assembly probably the same error happens to you.
--- Code: ---.use64
section "text" class_code alias ".text"
section "data" class_data alias ".data"
section "bss" class_bss alias ".bss"
struct GSList
data dq ?
next dq ?
ends
struct person
name dq ?
age dq ?
ends
;include g.inc
extern g_list_append lin64
extern g_list_first lin64
extern g_print lin64
extern g_slist_length lin64
extern g_slist_append lin64
extern g_slist_free lin64
extern g_slist_prepend lin64
extern g_slist_remove lin64
extern g_slist_remove_all lin64
extern g_slist_last lin64
extern g_slist_nth lin64
extern g_slist_nth_data lin64
extern g_slist_next lin64
;include c.inc
extern exit lin64
.entry _start
.bss
align 16
list rs GSList,1
;list rq 1
align 16
.data
align 16
one db "one",0
align 16
two db "two",0
align 16
three db "three",0
align 16
now db "The list is now %d items long",10,0
align 16
last db "The last item is '%s'",10,0
align 16
item db "index %d have string %s",10,0
align 16
avatar db "mineiro",0
align 16
pseudo person { avatar , 10 } ;<-comment this line and works fine
.text
_start:
xor rax,rax
mov [list.data],rax
mov [list.next],rax
invoke g_slist_length,[list.next]
invoke g_print,now,rax
invoke g_slist_append,[list.next],one
mov [list.next],rax
invoke g_slist_prepend,[list.next],three
mov [list.next],rax
invoke g_slist_append,[list.next],two
mov [list.next],rax
invoke g_slist_prepend,[list.next],three
mov [list.next],rax
invoke g_slist_prepend,[list.next],three
mov [list.next],rax
invoke g_slist_append,[list.next],two
mov [list.next],rax
invoke g_slist_length,[list.next]
invoke g_print,now,rax
invoke g_slist_remove,[list.next],two
mov [list.next],rax
invoke g_slist_length,[list.next]
invoke g_print,now,rax
invoke g_slist_remove_all,[list.next],three
mov [list.next],rax
invoke g_slist_length,[list.next]
invoke g_print,now,rax
invoke g_slist_last,[list.next]
invoke g_print,last,[rax]
invoke g_slist_nth,[list.next],1
invoke g_print,item,1,[rax]
invoke g_slist_nth_data,[list.next],0
invoke g_print,item,0,rax
;invoke g_slist_next,[list.next],0
mov rax,[list.next]
mov rax,[rax+GSList.next]
invoke g_print,item,1,[rax]
invoke g_slist_free,list
invoke exit,0
/*
sol_asm2 gslist1.solasm gslist1.o -elf64
ld -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -L/lib/x86_64-linux-gnu -L/usr/lib/x86_64-linux-gnu -lglib-2.0 -lc -o gslist1 gslist1.o
rm gslist1.o
*/
--- End code ---
bogdanontanu:
Yes, I will check this too ;)
bogdanontanu:
Hi mineiro,
There is a new version here:
http://www.oby.ro/sol_asm/files/sol_asm_2016_08_01_v36_34.zip
It fixes a lot of relocations issues for ELF64 / Linux
Navigation
[0] Message Index
[#] Next page
Go to full version