General Category > Sol_Asm

writing to data or bss section variables

(1/3) > >>

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