jjzjj

c++ - nasm/yasm 参数,与 C++ 的链接

我有一个关于nasm及其与C++的链接的问题。我将一个小测试函数声明为extern"C"void__cdeclmyTest(bytei1,bytei2,intstride,int*width);我这样调用它:bytei1=1,i2=2;intstride=3,width=4;myTest(i1,i2,stride,&width);该方法仅用于调试程序集并查看如何使用堆栈指针获取参数。除此之外,指针参数值应设置为7,以弄清楚它是如何工作的。这是这样实现的:global_myTest_myTest:moveax,[esp+4];1movebx,[esp+8];2movecx,dword[e

c++ - YASM 程序集在 jitted 函数中调用 stdout.write

我正在尝试编写一个即时编译器,但我有一段代码不想工作。我的平台是x86-64ubuntu。我在yasm中编写了以下代码:bits64movrdx,1movrcx,'A'movrbx,1movrax,4int0x80ret因此,如果我理解正确,这应该将A写入标准输出。现在我用编译这段代码yasm-fbintest.yasm这导致了以下机器代码:0x480xc70xc20x010x000x000x000x480xc70xc10x410x000x000x000x480xc70xc30x010x000x000x000x480xc70xc00x040x000x000x000xcd0x800xc3

linux - 如何避免不适合缓冲区的标准输入被发送到 Linux 64 位 Intel (x86-64) 程序集中的 shell

编辑:标题已更改,因为@Gunner指出这不是缓冲区溢出。在Linux64位Intel汇编中使用NR_read从stdin读取用户输入时,我想知道如何避免不适合输入缓冲区的输入被发送到Linuxshell例如。庆典?例如,在这个示例程序中,我定义了一个255字节的输入缓冲区(缓冲区的大小可以是>=1)。超过255字节的输入的其余部分被发送到bash(如果从bash运行),这显然是一个严重的漏洞。在Linux64位程序集中应如何读取输入以避免此漏洞?这是我的代码:[bits64]section.textglobal_start;canbecompiledeg.withnasmoryasm

linux - 如何避免不适合缓冲区的标准输入被发送到 Linux 64 位 Intel (x86-64) 程序集中的 shell

编辑:标题已更改,因为@Gunner指出这不是缓冲区溢出。在Linux64位Intel汇编中使用NR_read从stdin读取用户输入时,我想知道如何避免不适合输入缓冲区的输入被发送到Linuxshell例如。庆典?例如,在这个示例程序中,我定义了一个255字节的输入缓冲区(缓冲区的大小可以是>=1)。超过255字节的输入的其余部分被发送到bash(如果从bash运行),这显然是一个严重的漏洞。在Linux64位程序集中应如何读取输入以避免此漏洞?这是我的代码:[bits64]section.textglobal_start;canbecompiledeg.withnasmoryasm

linux - 无法从汇编 (yasm) 代码调用 64 位 Linux 上的 C 标准库函数

我有一个功能foo用汇编编写并在Linux(Ubuntu)64位上使用yasm和GCC编译。它只是使用puts()将消息打印到标准输出,这是它的外观:bits64externputsglobalfoosection.datamessage:db'foo()called',0section.textfoo:pushrbpmovrbp,rspleardi,[relmessage]callputspoprbpret它被一个用GCC编译的C程序调用:externvoidfoo();intmain(){foo();return0;}构建命令:yasm-felf64foo_64_unix.asmg

linux - 无法从汇编 (yasm) 代码调用 64 位 Linux 上的 C 标准库函数

我有一个功能foo用汇编编写并在Linux(Ubuntu)64位上使用yasm和GCC编译。它只是使用puts()将消息打印到标准输出,这是它的外观:bits64externputsglobalfoosection.datamessage:db'foo()called',0section.textfoo:pushrbpmovrbp,rspleardi,[relmessage]callputspoprbpret它被一个用GCC编译的C程序调用:externvoidfoo();intmain(){foo();return0;}构建命令:yasm-felf64foo_64_unix.asmg

android - 构建 yasm/source/patched-yasm/util.h :78:23: error: libintl. h 时出错:没有这样的文件或目录

构建将近半小时后,出现以下错误。到目前为止,谷歌搜索没有任何帮助......Infileincludedfromexternal/chromium_org/third_party/yasm/source/patched-yasm/libyasm/phash.c:2:external/chromium_org/third_party/yasm/source/patched-yasm/util.h:78:23:error:libintl.h:Nosuchfileordirectorymake:***[out/host/darwin-x86/obj/STATIC_LIBRARIES/thir

linux - Syscalls for x86-64 Linux NASM(YASM) 详细说明

我找到了x86-64模式的系统调用列表(带参数):http://filippo.io/linux-syscall-table/但是我在哪里可以得到这个系统调用的详细描述?例如下面的例子,除了0102o(rw,create)之外,哪些标志可以用于'open'系统调用,在其他情况下:只读、只写等SECTION.datamessage:db'Hello,world!',0x0alength:equ$-messagefnamedb"result"fddq0SECTION.textglobal_start_start:movrax,2;'open'syscallmovrdi,fname;file

c++ - 如何使用 gdb 调试使用 yasm 组装的代码?

我已经使用yasm汇编了代码,并链接到我的C++程序,但我无法在gdb中对来自汇编语言文件的符号设置断点。命令行可能不是很清楚,但我们开始吧:"g++"-ftemplate-depth-128-O0-fno-inline-Wall-g-fPIC-std=c++11-I"$HOME/usr/include"-c-o"bin/gcc-4.7/debug/main.o""main.cpp"yasm-gdwarf2-felf64-obin/gcc-4.7/debug/mandel.omandel.yasm"g++"-L"$HOME/usr/lib"-Wl,-R-Wl,"$HOME/usr/li

linux - 即使安装了 yasm 也找不到

我遇到了一个奇怪的问题。我试图安装x264。当运行sudo./configure--enable-shared时,它给出了:找不到汇编器最低版本是yasm-0.7.0如果您真的想在没有asm的情况下进行编译,请使用--disable-asm进行配置。但我已经安装了yasm-0.7.0,为了证明这一点,我运行yasm--version,它给出了:*yasm0.7.0.20662012年5月8日编制。版权所有(c)2001-2008PeterJohnson和其他Yasm开发人员。运行yasm--license以获得许可概述和摘要。*我将yasm安装到/usr/local/yasm,为什么找
12