预加载自定义strchr() - ubuntu崩溃

时间:2017-03-15 13:53:41

标签: linux ubuntu assembly strchr

我实现了strchr()

<select ng-model="selectedName" ng-options="x for x in names"></select>
<small ng-show="!names.length">No data to choose from</small>

...

app.controller('myCtrl', function($scope) {
    $scope.names = [];
});

当我使用将它预加载时。

        global  strchr
strchr:
        cmp     byte[rdi], 0
        je      end
        cmp     [rdi], sil
        je      end
        add     rdi, 1
        jmp     strchr
end:    mov     rax, rdi
        ret

Ubuntu 16.04崩溃。有时它会完全破解,有时会显示SIGILL(损坏的数据?)。

当我使用opensuse 4预加载它时,它可以工作。

知道为什么吗?

1 个答案:

答案 0 :(得分:1)

感谢Michael Petch:

strchr()不符合手册,因为在找不到字符时它不会返回NULL。

修正了strchr():

global  strchr
strchr:
        cmp     [rdi], sil;first check for character (useful if user searches '\0')
        je      end
        cmp     byte[rdi], 0;then if it is EoS and the character is not in the string, return NULL
        je      eos
        add     rdi, 1
        jmp     strchr
eos:    mov     rax, 0
        ret
end:    mov     rax, rdi
        ret