小编rai*_*308的帖子

将指针传递给汇编函数

我对汇编编程很新.我正在使用x86平台和GCC(Linux).

我有一个函数,我想从C调用:

myfunc ( unsigned char * s1, unsigned char * s2, int someint );
Run Code Online (Sandbox Code Playgroud)

该函数将获取s1和s2存储器位置并进行比较,然后递增和比较等,进行一些处理.这有点像memcmp,但我做得更多.

我的问题:如果我将指针传递给汇编函数?然后我怎么说"给我存储在这个内存地址的值"?

这是我到目前为止所拥有的:

要从堆栈中获取第一个函数arg("s1"),我这样做(someaddress是一个32位整数,我正在使用一个32位处理器):

movl  8(%esp), %ecx
movl  %ecx, someaddress
Run Code Online (Sandbox Code Playgroud)

如果我把somevar%eax(或%ebx等等),然后printf的它%p,我看到它的地址和无符号的字符指针"的地址,s1"我通过这都是一样的.但我怀疑我实际做的是获取内存地址,将其转换为整数,然后将该整数放入某个地址.

例如,如果我这样做:

movl  pos1, %eax
movl  pos2, %ebx
cmp   (%eax),(%ebx)
Run Code Online (Sandbox Code Playgroud)

我得到"错误:'cmp'的内存引用太多了".我不完全确定这意味着什么,除了"你搞砸了";-)

所以...

  • 如何传入指针并将其作为指针保存?
  • 如何在程序集中使用所述指针的值?(例如,*ptr在C中)

我想查看LEA操作数吗?

我正在使用Richard Blum的"专业装配编程"作为我的向导,但Blum似乎并没有涵盖这种情况.

更新

非常感谢您的学习回应!

不幸的是,我仍然无法解除引用.

这是一个简化的例子.汇编函数接受指针并应该回显它.相反,我得到:

first_ptr points to 81 (should be 81) <-- from C program
the value is -1543299247 <-- printf called from within assembler
the …
Run Code Online (Sandbox Code Playgroud)

assembly

10
推荐指数
1
解决办法
1万
查看次数

perl"或"错误处理:错误的多语句可能吗?

这个结构在perl中很常见:

opendir (B,"/somedir") or die "couldn't open dir!";
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用:

opendir ( B, "/does-not-exist " ) or {
    print "sorry, that directory doesn't exist.\n";
    print "now I eat fugu.\n";
    exit 1;
};
Run Code Online (Sandbox Code Playgroud)

"或"错误处理是否有可能有多个命令?

编译以上内容:

# perl -c test.pl
syntax error at test.pl line 5, near "print"
syntax error at test.pl line 7, near "}"
test.pl had compilation errors.
Run Code Online (Sandbox Code Playgroud)

perl

7
推荐指数
1
解决办法
5372
查看次数

在Azure Linux VM中,还有什么?什么磁盘收费?

我在Microsoft的Azure中创建了一个Small Linux VM.我还创建了一个20GB的BLOB并将其作为文件系统安装.

在我的VM上,我看到以下内容:

  • 根文件系统:大约28GB
  • 启动文件系统:大约500MB
  • 我的20GB文件系统
  • / mnt/resource - 69GB

所以我有疑问:

(1)如果我关闭VM然后再打开电源,这些文件系统/卷中的哪一个将在VM断电时保持状态?每个卷(我测试过)都是如此,但"它在测试中工作"与保证不同.

(2)如果VM需要移动,因为Azure环境中存在某种硬件故障或故障("自我修复迁移"),那些文件系统中哪些会持续存在?我怀疑root会,但不是/ mnt/resource?

(3)在azure管理门户中,我创建了一个30GB的磁盘,这个磁盘是在创建VM时创建的.该磁盘的成本是每小时每分钟VM费用的一部分,还是单独收费?我认为这是分开的.

(4)据说一个小型虚拟机配备165GB用于"虚拟机角色中的本地存储资源的磁盘空间":http://msdn.microsoft.com/en-us/library/windowsazure/ee814754.aspx 我看到69GB - 其中剩下的去哪?

您认为我可以向微软询问这些问题,但是当我这样做时,他们说Linux虚拟机处于"预览"状态,并且他们的支持拒绝回答任何Linux VM问题,除非指向相当幽灵般的Azure论坛.

linux virtual-machine azure

7
推荐指数
1
解决办法
2774
查看次数

Azure 本地磁盘 - 它去哪儿了?(Linux 虚拟机)

Azure VM 表...

https://www.windowsazure.com/en-us/pricing/details/#header-2

...说,例如,中型实例带有 490GB 的本地存储。所以我期待通常的 30GB Azure BLOB OS 磁盘,然后是 490GB /mnt/resource。

但不是:

$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       28G  1.7G   25G   7% /
tmpfs                 1.7G     0  1.7G   0% /dev/shm
/dev/sda1             485M   68M  392M  15% /boot
/dev/sdb1             133G  188M  126G   1% /mnt/resource
Run Code Online (Sandbox Code Playgroud)

这是在 CentOS 映像上,但对于其他映像也是如此。

我错过了什么吗?我看不到卷组中的空间或任何东西,也没有未安装的 sd* 设备。

linux virtual-machine azure

5
推荐指数
1
解决办法
4282
查看次数

Javascript将焦点移到浏览器地址栏?

使用Safari,如果我将其设置为打开新选项卡为空白,当我点击cmd-T时,我的光标位于地址栏中,准备输入URL或搜索.

如果我将其设置为转到主页,则光标不会立即转到地址栏,我必须按击键.

我可以在我的主页上放置一个Javascript(我是唯一使用它的人 - 通常的"书签"页面),这样当我访问该页面时,我的焦点(光标)会自动进入浏览器的地址栏吗?

我可以添加一个搜索框,但有时我想直接输入一个URL.

javascript

5
推荐指数
1
解决办法
2963
查看次数

Golang:你能在一个语句中输入一个返回的接口{}吗?

假设我有这个:

type Donut string
type Muffin string

func getPastry () (interface{}, error) {
  // some logic - this is contrived
  var d Donut
  d = "Bavarian"
  return d, nil
}
Run Code Online (Sandbox Code Playgroud)

是否可以将其减少到一行:

p, err := getPastry()
thisPastry := p.(Donut)
Run Code Online (Sandbox Code Playgroud)

换句话说,这样的东西,不编译:

thisPastry, err := getPastry().(Donut, error)
Run Code Online (Sandbox Code Playgroud)

不是有两行代码来获得"通用"并输入它是一件大事,但它对我来说只是感觉浪费和不简单,这通常意味着我错过了一些明显的东西:-)

interface go type-assertion multiple-return-values

4
推荐指数
1
解决办法
408
查看次数

C编译器:"类型'char*'和'int'不是赋值兼容的" - 但是没有int?

我正在将一个FOSS包移植到HP-UX.我有一个编译器警告,我无法弄清楚.我应该注意到我正在使用HP-UX捆绑的免费/ usr/bin/cc,而不是附加购买的编译器,以使包尽可能广泛使用.

编译(只是没有标志的cc)说:

Warning 942: "grep.c", line 288 # Types 'char *' and 'int' are not assignment-compatible.
        if ((fname = strsep(&lp, ":")) == NULL)
             ^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

声明该函数中的fname:

    char    *fname, *line, *lp, *ln;
Run Code Online (Sandbox Code Playgroud)

所以fname是一个char ptr.这就是strsep()返回的内容:

char *strsep(char **stringp, const char *delim) {
Run Code Online (Sandbox Code Playgroud)

strsep包含在OpenBSD中:http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/string/strsep.c? rev = 1.6; content-type = text%2Fplain

所以...... strsep返回一个char指针,这就是fname.strsep只能返回一个字符指针或NULL.那么所有这些中的'int'在哪里?

c

3
推荐指数
2
解决办法
572
查看次数

CSS - 如何避免每个段落的class =?

假设我有一个像这样的CSS:

p {
        color: #000000;
}

p.myclass {
        color: #ff0000;
}
Run Code Online (Sandbox Code Playgroud)

所以所有段落文本都应该是黑色的,除了"myclass"段落,它们是红色的.

我看到的是,如果我这样做:

<div class="myclass">
<p>Something something something</p>
</div>
Run Code Online (Sandbox Code Playgroud)

我还是变黑了.如果我这样做:

<p class="myclass">Something something something</p>
Run Code Online (Sandbox Code Playgroud)

然后我变红了.

在真实世界的页面上,我有多个部分要我应用不同的类,所以我不能只在页面级别定义'p'.但是每个人都是等级=

标签看起来真的很低效.

难道没有办法说"在这个块中,使用这个类,然后任何

该块中的标签是否与该类匹配?我认为这就是div所做的.

我确信有一些基本的我误解了......

html css

3
推荐指数
1
解决办法
208
查看次数

在 golang 中解析 JSON 的一部分

我有一个接收 JSON 消息的应用程序。JSON 有各种“部分”(下面的示例)。每个部分都有一个名称,但除此之外的结构每个部分都完全不同。

我想要做的是遍历各个部分,并将每个部分解组到适当的对象中。但奇怪的是,我发现这很困难,因为您似乎可以将整个 JSON 解组为一个对象,或者您可以获得一个通用的 map[string]interface{}。我发现的所有示例代码都涉及类型切换和手动分配变量……我希望将neato Unmarshal 直接执行到对象中。

有没有办法提供解组 JSON 的子集?我可以自己对字节 [] 进行切片和切块,但这似乎很可怕……其他人肯定也经历过这样的事情吗?

这是我玩过的。

package main

import "encoding/json"

type Book struct {
    Author string
    Title  string
    Price  float64
}

type Movie struct {
    Title  string
    Year   float64
    Stars  float64
    Format string
}

var sections map[string]interface{}

func main() {

    /*
     * "Book" and "Movie" are "sections".
     * There are dozens of possible section types,
     * and which are present is not known ahead of time
     */

    incoming_msg_string := ` …
Run Code Online (Sandbox Code Playgroud)

json go

3
推荐指数
1
解决办法
2000
查看次数

为什么结构的字段是“非名称”

此代码不起作用。它抱怨j.Bar是一个“非名称”:

package main

import "fmt"
import "os"

type foo struct {
    Bar string
    Baz int
}

func main() {
    var j foo

    // this next line fails with "non-name j.Bar on left side of :="
    j.Bar, ok := os.LookupEnv("SOME VAR")
    if ( ! ok ) {
        panic("lookup failed!")
    }
    fmt.Printf("j.Bar is now %s\n",j.Bar)
}
Run Code Online (Sandbox Code Playgroud)

现在,我可以轻松更改它以使其正常工作:

package main

import "fmt"
import "os"

type foo struct {
    Bar string
    Baz int
}

func main() {
    var j foo

    val, ok := os.LookupEnv("SOME …
Run Code Online (Sandbox Code Playgroud)

go

1
推荐指数
1
解决办法
1031
查看次数

在macOS上使用DBD :: SQLite High Sierra会产生大量"子程序重新定义"警告

简而言之,当我在macOS High Sierra上使用DBD :: SQLite时,我得到了大量虚假的"子程序...重新定义"错误.

如果我使用此代码并在我的iMac或MacBook Pro上运行(均运行10.13.3 High Sierra)...

#!/usr/bin/perl -w

use DBI;
use DBD::sqlite;

$db_file = "./anything.db";

$dbh = DBI->connect("dbi:SQLite:dbname=$db_file","","");
$dbh->disconnect();
Run Code Online (Sandbox Code Playgroud)

它产生了这个:

Constant subroutine DBD::SQLite::NEWAPI redefined at /System/Library/Perl/5.18/constant.pm line 140.
Subroutine driver redefined at /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level/DBD/SQLite.pm line 31.
Subroutine CLONE redefined at /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level/DBD/SQLite.pm line 73.
Subroutine connect redefined at /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level/DBD/SQLite.pm line 80.
Subroutine install_collation redefined at /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level/DBD/SQLite.pm line 160.
Subroutine regexp redefined at /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level/DBD/SQLite.pm line 178.
Subroutine prepare redefined at /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level/DBD/SQLite.pm line 186.
Subroutine do redefined at /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level/DBD/SQLite.pm line 200. …
Run Code Online (Sandbox Code Playgroud)

macos perl

0
推荐指数
1
解决办法
86
查看次数

在ac#构造函数参数中使用数组

我有一个看起来像这样的课程:

class MyHash : IComparable
{
    public byte[] myBytes = new byte[15];

    // constructor
    MyHash(byte[] incomingByteArray)
    {
        for (int i = 0; i <= 15; i++)
        {
            myBytes[i] = incomingByteArray[i];
        }
    }
   // other irrelevant stuff here
 }
Run Code Online (Sandbox Code Playgroud)

现在稍后当我想使用这个类时,我尝试:

MD5 hashMaker = MD5.Create();
byte[] hash = hashMaker.ComputeHash(Encoding.UTF8.GetBytes(thisSubstring));
listOfHashes.Add(new MyHash(hash));
Run Code Online (Sandbox Code Playgroud)

...和Visual Studio(2013)抱怨MyHash"不包含带有1个参数的构造函数".

所以说起来作为ac#novice和可能误用单词来启动,我认为MyHash构造函数正在获得对'hash'的单一引用,它期待的是一个数组......?

我可以破解这个有15个参数的构造函数并实例化它(新的MyHash(hash [0],hash [1]等))但这似乎是错误的事情,我担心我会付钱给它在生活中的程序员.我可以将byte []转换为ArrayList或者其他东西,但是当你在该循环中运行数百万次时会增加相当大的开销.

我也没有看到在构造函数中指定特定数组长度的方法(例如,bytes [15]).

那么将一个字节数组(byte [])发送给构造函数的Correct和True方法是什么?

非常感谢!

c#

-1
推荐指数
1
解决办法
52
查看次数