有没有办法在linux终端中显示类似notify-send命令的消息,用NASM编码?
我在Ubuntu中使用此命令:
notify-send "Test"
是否可以使用NASM显示类似的内容?
答案 0 :(得分:0)
您想将文本发送到桌面并在弹出窗口中显示?好吧,我对notify-send
事物一无所知,所以我做了一个搜索,发现你可以用通知库写一些东西。总而言之,我花了10分钟阅读一些文档,并编写示例代码并写下来......
bits 64
extern notify_init, notify_notification_new, notify_notification_show, notify_uninit
extern exit
section .data
name db "Sample Notification", 0
title db "Just a test", 0
global main
section .text
main:
mov rdi, name
call notify_init
mov rdx, 0
mov rsi, title
mov rdi, name
call notify_notification_new
mov rsi, 0
mov rdi, rax
call notify_notification_show
call notify_uninit
call exit
生成文件:
APP = notify
$(APP): $(APP).o
gcc -o $(APP) $(APP).o -lnotify
$(APP).o: $(APP).asm
nasm -f elf64 $(APP).asm
您需要使用libnotify-dev
或您的软件包管理器
apt-get
对于32位系统应该是类似的。
答案 1 :(得分:0)
很好的例子。不知道可以做到。我遇到的只是一个小问题。如果没有-fPIE,我将无法编译它,即使使用它,我也无法进行编译(也许C专家cn会帮助我)。
对此的解决方案是(原始代码稍作修改: 用global _start代替global main和 标签main:和_start: 然后使用下一个生成文件:
BIN=notify
NASM=/usr/bin/nasm
NASMOPTS=-felf64 -Fdwarf
LDOPS=-melf_x86_64 -g --dynamic-linker /lib64/ld-linux-x86-64.so.2
LIBS=-lc -lnotify
.PHONY: all clean
all: $(BIN)
clean:
rm -rf $(BIN)
%: %.asm
$(NASM) $(NASMOPTS) -o $@.o $<
$(LD) $(LDOPS) -o $@ $@.o $(LIBS)
rm -f $@.o